\documentstyle[lslide,a4wide,psfig]{harticle}

\title{Debugging Tools}
\author{±Ç ¹ü ÁØ}
\organization{SPARCS} 
\date{1993³â 7¿ù 28ÀÏ}

\addtolength{\textheight}{-0.5in}
\verttop
\shadowframe

\newenvironment{example}{\begin{normalsize} \begin{center} \begin{tabular}{|c|} \hline \\ \begin{minipage}{12cm}}{\end{minipage} \\ \\ \hline \end{tabular} \end{center} \end{normalsize}}
\newenvironment{smallexample}{\begin{small} \begin{center} \begin{tabular}{|c|} \hline \\ \begin{minipage}{12cm}}{\end{minipage} \\ \\ \hline \end{tabular} \end{center} \end{small}}

\begin{document}

\titlepage

\begin{slide}
\subsection{{\tt dbx} °³¿ä}

\begin{itemize}
    \item »ç¿ë¹ý
\end{itemize}

\begin{example}
{\tt dbx [-r] [-kbd] [-I{\em dir}] [{\em objectfile} [{\em corefile} | {\em processID}]]}
\end{example}

\begin{itemize}
    \item ÁÖµÈ ¿ëµµ
    \begin{itemize}
        \item ¿À·ù°¡ ¹ß»ýÇÑ °÷À» Ã£À» ¶§
        \item º¯¼öÀÇ ³»¿ëÀ» ÂüµµÇÏ°Å³ª ¹Ù²Ü ¶§
        \item »ó¼ö °ªÀ» º¼ ¶§
        \item Breakpoint¸¦ ¼³Á¤ÇÒ ¶§
        \item ÇÁ·Î±×·¥À» ½ÇÇàÇÏ°í ÃßÀûÇÒ ¶§
    \end{itemize}
    \vspace{5mm}

    \item {\tt dbx}¿ë È­ÀÏÀÇ ÁØºñ
    \begin{itemize}
        \item {\tt -g} ¿É¼ÇÀ¸·Î ÄÄÆÄÀÏ
    \end{itemize}
    \vspace{5mm}

    \item {\tt dbx}ÀÇ ¿É¼Ç
    \begin{tabbing}
		{\tt 12345} \= \kill
        {\tt -r}          \> --- °ð¹Ù·Î ½ÇÇà, ÀÎÀÚ ÁöÁ¤ °¡´É \\
        {\tt -kbd}        \> --- up-down translation mode \\
        {\tt -I{\em dir}} \> --- ¿ø½Ã È­ÀÏÀÇ À§Ä¡ ÁöÁ¤
    \end{tabbing}
    \vspace{5mm}

    \item Á¶»çÇÒ ´ë»ó
    \begin{itemize}
        \item ½ÃÇà È­ÀÏ (objectfile)
        \item ½ÇÇàÁß ¿À·ù ¹ß°ß½Ã (corefile)
        \item ÇÁ·Î¼¼½º ÁöÁ¤ (processID)
    \end{itemize}
\end{itemize}
\end{slide}

\begin{slide}
\subsection{{\tt dbx} ÁÖ¿ä ¸í·É}

\begin{itemize}
    \item Listing Active and Post-Mortem Procedures
	\begin{Smallsize}
    \begin{itemize}
        \item {\tt where [{\em n}]}
        \item {\tt up [{\em n}]}
        \item {\tt down [{\em n}]}
    \end{itemize}
	\end{Smallsize}
    \vspace{5mm}

    \item Nameing and Displaying Data
	\begin{Smallsize}
    \begin{itemize}
        \item {\tt print {\em expression}[,{\em expression} ...]}
        \item {\tt display {\em expression}[,{\em expression} ...]}
        \item {\tt undisplay {\em expression}[,{\em expression} ...]}
        \item {\tt whatis {\em identifier/type}}
        \item {\tt which {\em identifier}}
        \item {\tt whereis {\em identifier}}
        \item {\tt assign {\em variable}={\em expression}}
        \item {\tt set {\em variable}={\em expression}}
        \item {\tt dump [{\em func}]}
    \end{itemize}
	\end{Smallsize}
    \vspace{5mm}

    \item Setting Breakpoints
	\begin{Smallsize}
    \begin{itemize}
        \item {\tt stop at {\em source-line-number} [if {\em condition}]}
        \item {\tt stop in {\em procedure/function} [if {\em condition}]}
        \item {\tt stop {\em variable} [if {\em condition}]}
        \item {\tt stop if {\em condition}}
        \item {\tt when in {\em procedure/function} \{ {\em command;} ... \}}
        \item {\tt when at {\em source-line-number} \{ {\em command;} ... \}}
        \item {\tt when {\em condition} \{ {\em command;} ... \}}
    \end{itemize}
	\end{Smallsize}
    \vspace{5mm}

    \item Viewing and Changing Breakpoints
	\begin{Smallsize}
    \begin{itemize}
        \item {\tt status [> {\em filename}]}
        \item {\tt delete {\em command-number} [[,] {\em command-number} ...]}
        \item {\tt delete all}
        \item {\tt clear [{\em source-line-number}]}
    \end{itemize}
	\end{Smallsize}
    \vspace{5mm}

    \item Trapping Signals
	\begin{Smallsize}
    \begin{itemize}
        \item {\tt catch [{\em number} [[,] {\em number} ...]]}
        \item {\tt ignore [{\em number} [[,] {\em number} ...]]}
    \end{itemize}
	\end{Smallsize}
    \vspace{5mm}

    \item Running and Tracing Programs
	\begin{Smallsize}
    \begin{itemize}
        \item {\tt run [{\em args}] [> {\em filename} | >> {\em filename}]}
        \item {\tt rerun [{\em args}] [> {\em filename} | >> {\em filename}]}
        \item {\tt cont [at {\em source-line-number}] [sig {\em sig-number}]}
        \item {\tt trace {\em source-line-number} [if {\em condition}]}
        \item {\tt trace {\em procedure/function} [if {\em condition}]}
        \item {\tt trace [in {\em procedure/function}] [if {\em condition}]}
        \item {\tt trace {\em expression} at {\em source-line-number} [if {\em condition}]}
        \item {\tt trace {\em variable} [in {\em procedure/function}] [if {\em condition}]}
        \item {\tt step [{\em n}]}
        \item {\tt next [{\em n}]}
        \item {\tt call {\em procedure}({\em parameters})}
    \end{itemize}
	\end{Smallsize}
\end{itemize}
\end{slide}

\begin{slide}
\begin{itemize}
    \item Accessing Source Files and Directories
	\begin{Smallsize}
    \begin{itemize}
        \item {\tt edit [{\em filename}]}
        \item {\tt edit {\em procedure/function}}
        \item {\tt file [{\em filename}]}
        \item {\tt func [{\em procedure/function}]}
        \item {\tt list [{\em source-line-number} [, {\em source-line-number}]]}
        \item {\tt list {\em procedure/function}}
        \item {\tt use [{\em directory} ...]}
        \item {\tt cd [{\em dirname}]}
        \item {\tt pwd}
        \item {\tt /{\em string}[/]}
        \item {\tt ?{\em string}[?]}
    \end{itemize}
	\end{Smallsize}
    \vspace{5mm}

    \item Machine-Level Commands
	\begin{Smallsize}
    \begin{itemize}
        \item {\tt tracei [{\em address}] [if {\em cond}]}
        \item {\tt tracei [{\em variable}] [at {\em address}] [if {\em cond}]}
        \item {\tt stopi [{\em variable}] [if {\em cond}]}
        \item {\tt stopi [at {\em address}] [if {\em cond}]}
        \item {\tt stepi}
        \item {\tt nexti}
    \end{itemize}
	\end{Smallsize}
\end{itemize}
\end{slide}

\begin{slide}
\begin{itemize}
    \item Miscellaneous Commands
	\begin{Smallsize}
    \begin{itemize}
        \item {\tt sh [{\em command-line}]}
        \item {\tt alias {\em new-command-name} {\em character-sequence}}
        \item {\tt help [{\em command}]}
        \item {\tt source {\em filename}}
        \item {\tt quit}
        \item {\tt dbxenv}
        \item {\tt dbxenv case sensitive/insensitive}
        \item {\tt dbxenv makeargs {\em args}}
        \item {\tt dbxenv speed {\em seconds}}
        \item {\tt dbxenv stringlen {\em num}}
        \item {\tt debug [{\em objectfile} [{\em corefile/process-id}]]}
        \item {\tt kill}
        \item {\tt modules}
        \item {\tt detach}
        \item {\tt setenv {\em name} {\em string}}
    \end{itemize}
	\end{Smallsize}
\end{itemize}
\end{slide}

\begin{slide}
\subsection{{\tt dbx} ±âÅ¸}

\begin{itemize}
    \item Debugging Large Programs
	\begin{Smallsize}
    \begin{itemize}
        \item µð¹ö±ë Á¤º¸¸¦ ¸ðµâº°·Î ¼±ÅÃ
        \item {\tt modules}
    \end{itemize}
	\end{Smallsize}
\end{itemize}

\begin{example}
\begin{verbatim}
(dbx) debug a.out
(dbx) modules
 object file(a.out)      source files
  a.o                  ../src/a.c ../src/a.y
  b.o                  ../src/b.c
(dbx)
\end{verbatim}
\end{example}

\begin{itemize}
	\begin{Smallsize}
    \begin{itemize}
        \item {\tt modules select {\em objname} [{\em objname} ...]}
        \item {\tt modules select}
        \item {\tt modules select all}
        \item {\tt modules append {\em objname} [{\em objname} ...]}
    \end{itemize}
	\end{Smallsize}
\end{itemize}

\begin{example}
\begin{verbatim}
% dbx
(dbx) debug a.out
Reading symbolic information...
Read 1600 symbols
(dbx) modules
 object file(a.out)      source files
  a.o                  ../src/a.c ../src/a.y
  b.o                  ../src/b.c
(dbx) modules select b.o
(dbx) debug a.out
Reading symbolic information...
Read 1600 symbols (1 of 2 files selected)
(dbx) modules
 object file(a.out)      source files
  b.o                  ../src/b.c
(dbx)
\end{verbatim}
\end{example}
\vspace{5mm}

\begin{itemize}
    \item Debugging Child Processes
	\begin{Smallsize}
    \begin{itemize}
        \item {\tt fork()}¿¡ ÀÇÇØ child process°¡ »ý¼ºµÇ¸é?
        \item µ¿½Ã¿¡ ÃßÀûÇÏ·Á¸é
        \begin{enumerate}
            \item child process ½ÇÇà ºÎºÐ¿¡ ½Ã°£ Áö¿¬ ¸í·É »ðÀÔ
            \item parent process ½ÇÇà ºÎºÐ¿¡ breakpoint ¼³Á¤
            \item »õ·Î¿î {\tt dbx} ½ÇÇà
            \item child processÀÇ process-id ÁöÁ¤
            \item µ¿½Ã¿¡ µÎ °³ÀÇ {\tt dbx} ½ÇÇà
        \end{enumerate}
    \end{itemize}
	\end{Smallsize}
\end{itemize}

\begin{example}
\begin{verbatim}
% dbx a.out
Reading symbolic information...
Read 42 symbols
(dbx) list 1,15
    1   #include <stdio.h>
    2   main()
    3   {
    4           int pid;
    5
    6           pid = fork();
    7           printf("pid is %d\n", pid);
    8           switch(pid)
    9           {
   10           case -1:
   11                   perror("fork");
   12           case 0:
   13                   sleep(20);
   14           }
   15   }
(dbx) stop at 14
(2) stop at "child.c":15
(dbx) run
Running: a.out
pid is 0
pid is 1537
stopped in main at line 15 in file "child.c"
   15   }
(dbx)
\end{verbatim}
\end{example}

\begin{example}
\begin{verbatim}
% dbx a.out 1537
Reading symbolic information...
Read 42 symbols
(dbx) list
   13                   sleep(20);
   14           }
   15   }
(dbx)
\end{verbatim}
\end{example}
\vspace{15mm}

\subsection{{\tt dbxtool}}

\centerline{\psfig{file=dbxtool.ps}}

\end{slide}
\end{document}
