ctrace(1) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

ctrace(1)

ctrace(1)                        User Commands                       ctrace(1)

NAME
       ctrace - C program debugger

SYNOPSIS
       ctrace [options] [file]

DESCRIPTION
       The  ctrace command allows the user to monitor the sequential execution
       of a C program as each program statement executes. The effect is  simi‐
       lar to executing a shell procedure with the -x option. ctrace reads the
       C  program in file (or from standard input if the user does not specify
       file), inserts statements to print the text of each  executable  state‐
       ment and the values of all variables referenced or modified, and writes
       the  modified program to the standard output. The output of ctrace must
       be placed into a temporary file because the cc(1) commands do not allow
       the use of a pipe. This file can then be compiled and executed.


       As each statement in the program executes, it will  be  listed  at  the
       terminal, followed by the name and value of any variables referenced or
       modified in the statement; these variable names and values will be fol‐
       lowed  by  any output from the statement. Loops in the trace output are
       detected and tracing is stopped until the loop is exited or a different
       sequence of statements within the loop is executed. A  warning  message
       is printed after each 1000 loop cycles to help the user detect infinite
       loops. The trace output goes to the standard output so the user can put
       it into a file for examination with an editor or the tail(1) command.


       The options commonly used are:

       -f functions        Trace only these functions.


       -v functions        Trace all but these functions.



       The user may want to add to the default formats for printing variables.
       Long  and  pointer  variables  are  always  printed as signed integers.
       Pointers to character arrays are also printed as strings  if  appropri‐
       ate. char, short, and int variables are also printed as signed integers
       and,  if  appropriate,  as  characters. double variables are printed as
       floating point numbers in scientific notation.  The  user  can  request
       that  variables  be printed in additional formats, if appropriate, with
       these options:

       -o    Octal


       -x    Hexadecimal


       -u    Unsigned


       -e    Floating point



       These options are used only in special circumstances:

       -l n

           Check n consecutively executed statements for looping trace output,
           instead of the default of 20. Use 0 to get  all  the  trace  output
           from loops.


       -s

           Suppress  redundant  trace output from simple assignment statements
           and string copy function calls. This option can hide a  bug  caused
           by use of the = operator in place of the == operator.


       -t n

           Trace  n  variables per statement instead of the default of 10 (the
           maximum number is 20). The diagnostics section explains when to use
           this option.


       -P

           Preprocess the input before tracing it. The user can also  use  the
           -D, -I, and -U  cc(1) options.


       -p string

           Change the trace print function from the default of printf. For ex‐
           ample,  fprintf(stderr,  would send the trace to the standard error
           output.


       -r f

           Use file f in place of the runtime.c trace function  package.  This
           replacement lets the user change the entire print function, instead
           of just the name and leading arguments (see the -p option).


       -V

           Prints version information on the standard error.


       -Qarg

           If  arg is y, identification information about ctrace will be added
           to the output files. This can be useful  for  software  administra‐
           tion.  Giving  n  for  arg  exlicitly asks for no such information,
           which is the default behavior.


EXAMPLES
       If the file lc.c contains this C program:


         1 #include <stdio.h>
         2 main() /* count lines in input */
         3 {
         4   int c, nl;
         5
         6   nl = 0;
         7   while ((c = getchar()) != EOF)
         8        if (c = '\n')
         9             ++nl;
         10   printf("%d\n", nl);
         11 }




       these commands and test data are entered:


         cc lc.c
         a.out
         1
         (cntl-d)




       the program will be compiled and executed. The output  of  the  program
       will be the number 2, which is incorrect because there is only one line
       in  the  test data. The error in this program is common, but subtle. If
       the user invokes ctrace with these commands:


         ctrace lc.c >temp.c
         cc temp.c
         a.out




       the output will be:


         2 main()
         6   nl = 0;
             /* nl == 0 */
         7   while ((c = getchar()) != EOF)




       The program is now waiting for input. If the user enters the same  test
       data as before, the output will be:


              /* c == 49 or '1' */
          8        if (c = '\n')
                   /* c == 10 or '\n' */
          9             ++nl;
                        /* nl == 1 */
          7   while ((c = getchar()) != EOF)
              /* c == 10 or '\n' */
          8        if (c = '\n')
                   /* c == 10 or '\n' */
          9             ++nl;
                        /* nl == 2 */
          7   while ((c = getchar()) != EOF)




       If  an end-of-file character (cntl-d) is entered, the final output will
       be:


              /* c == -1 */
         10   printf("%d\n", nl);
              /* nl == 2 */2
              return




       Note the information printed out at the end of the trace line  for  the
       nl  variable  following  line 10. Also note the return comment added by
       ctrace at the end of the trace output. This shows the  implicit  return
       at the terminating brace in the function.


       The  trace  output  shows  that variable c is assigned the value '1' in
       line 7, but in line 8 it has the value '\n'.  Once  user  attention  is
       drawn  to  this  if statement, he or she will probably realize that the
       assignment operator (=) was used in  place  of  the  equality  operator
       (==). This error can easily be missed during code reading.

EXECUTION-TIME TRACE CONTROL
       The  default  operation for ctrace is to trace the entire program file,
       unless the -f or -v options are used to trace specific  functions.  The
       default operation does not give the user statement-by-statement control
       of  the  tracing,  nor does it let the user turn the tracing off and on
       when executing the traced program.


       The user can do both of these by adding ctroff() and  ctron()  function
       calls  to  the program to turn the tracing off and on, respectively, at
       execution time. Thus, complex criteria can  be  arbitrarily  coded  for
       trace  control with if statements, and this code can even be condition‐
       ally included because ctrace defines the CTRACE preprocessor  variable.
       For example:

         #ifdef CTRACE
              if (c == '!' && i > 1000)
                   ctron();
         #endif



       These  functions  can  also  be called from dbx(1) if they are compiled
       with the -g option. For example, to trace all but lines 7 to 10 in  the
       main function, enter:

         dbx a.out
         when at 7 {call ctroff();}
         when at 7 {call ctron();}
         run



       The trace can be turned off and on by setting static variable tr_ct_ to
       0  and 1, respectively. This on/off option is useful if a user is using
       a debugger that can not call these functions directly.

FILES
       runtime.c run-time trace package

SEE ALSO
       bfs(1), dbx(1), tail(1), ctype(3C), fclose(3C), fprint(3C), string(3C)

DIAGNOSTICS
       This section contains diagnostic messages from both ctrace  and  cc(1),
       since the traced code often gets some cc warning messages. The user can
       get cc error messages in some rare cases, all of which can be avoided.

   ctrace Diagnostics
       warning: some variables are not traced in this statement

           Only  10  variables are traced in a statement to prevent the C com‐
           piler "out of tree space; simplify expression" error.  Use  the  -t
           option to increase this number.


       warning: statement too long to trace

           This statement is over 400 characters long. Make sure that tabs are
           used to indent the code, not spaces.


       cannot handle preprocessor code, use -P option

           This  is usually caused by #ifdef/#endif preprocessor statements in
           the middle of a C statement, or by a semicolon at the end of a #de‐
           fine preprocessor statement.

           Split the sequence by removing an else from the middle.


       possible syntax error, try -P option

           Use the -P option to preprocess the ctrace input,  along  with  any
           appropriate -D, -I, and -U preprocessor options.


NOTES
       Defining a function with the same name as a system function may cause a
       syntax  error if the number of arguments is changed. Just use a differ‐
       ent name.


       ctrace assumes that BADMAG is a preprocessor macro, and  that  EOF  and
       NULL  are  #defined  constants. Declaring any of these to be variables,
       e.g., "int EOF;", will cause a syntax error.


       Pointer values are always treated as pointers to character strings.


       ctrace does not know about the components  of  aggregates  like  struc‐
       tures,  unions,  and arrays. It cannot choose a format to print all the
       components of an aggregate when an assignment is made to the entire ag‐
       gregate. ctrace may choose to print the address of an aggregate or  use
       the  wrong format (e.g., 3.149050e-311 for a structure with two integer
       members) when printing the value of an aggregate.


       The loop trace output elimination is done separately for each file of a
       multi-file program. Separate output elimination can result in functions
       called from a loop still being traced, or the elimination of trace out‐
       put from one function in a file until  another  in  the  same  file  is
       called.

Studio 12.6                       March 1998                         ctrace(1)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3