Annotation of researchv10dc/630/man/src/u_man/man1/dmdpi.1, revision 1.1

1.1     ! root        1: .TH DMDPI 1 "630 MTG"
        !             2: .SH NAME
        !             3: dmdpi \- 630 MTG process inspector and debugger
        !             4: .SH SYNOPSIS
        !             5: .B dmdpi [ -c ]
        !             6: .SH DESCRIPTION
        !             7: .I Dmdpi
        !             8: is a C language debugger that is bound dynamically to multiple subject
        !             9: processes executing in a 630 MTG window in the layers environment.
        !            10: In order to use dmdpi to its full capabilities, it is necessary to compile
        !            11: the source program with the
        !            12: .I -g
        !            13: option of
        !            14: .IR dmdcc .
        !            15: However, if the target program is not compiled with 
        !            16: .I -g, 
        !            17: or no symbol tables
        !            18: at all are available, dmdpi works as well as possible with the information
        !            19: provided to it.
        !            20: .PP
        !            21: If the -c option is selected, \f2dmdpi\f1 will be
        !            22: cached in the 630 MTG cache system. This will enable
        !            23: \f2dmdpi\f1 to be executed again without the need for another
        !            24: download.
        !            25: .PP
        !            26: Dmdpi uses a
        !            27: multi-window user interface.
        !            28: There are three types of windows:
        !            29: debugger control windows,
        !            30: which access the global state of the debugger;
        !            31: process control windows (exactly one per process),
        !            32: which start and stop processes and connect to process-specific functions;
        !            33: and process inspection windows,
        !            34: which include viewers for source text and memory, formatted various ways.
        !            35: Initially, there are three debugger control 
        !            36: windows available: \fBdmdpi\fR, \fBhelp\fR
        !            37: and \fBpwd/cd\fR.
        !            38: .P
        !            39: One might need to debug some initialization code that would ordinarily be 
        !            40: executed before dmdpi has a chance to gain control of the process.  
        !            41: The \fI-z\fR
        !            42: of \fIdmdld\fR is useful for this purpose. This allows you to take
        !            43: control of a process before the first statement is executed.
        !            44: See the \fIdmdld(1)\fR manual page for details on using this option.
        !            45: 
        !            46: .SS User Interface
        !            47: Button 1 points.
        !            48: Pointing at a window makes it current, noted with a highlighted border;
        !            49: pointing at a line of text makes it current and inverts its video.
        !            50: A scroll bar at the left of each window shows how
        !            51: much of the text of a window is visible;
        !            52: pointing into the scroll region and moving the mouse 
        !            53: controls what text is displayed.
        !            54: .PP
        !            55: Button 2 has a menu of operations that apply to the current line.
        !            56: Operations above the 
        !            57: .B ~~~~~ 
        !            58: separator are specific to each line;
        !            59: operations below the separator are generic line operations:
        !            60: .TP 1i
        !            61: .B cut
        !            62: Remove the line.
        !            63: .TP
        !            64: .B sever
        !            65: Remove the line and all lines above it.
        !            66: .TP
        !            67: .B fold
        !            68: Wrap the line, if it extends past the right margin.
        !            69: .TP
        !            70: .B truncate
        !            71: Truncate the line at the right margin.
        !            72: .LP
        !            73: Button 3 has a menu of window-level operations and is in two parts.
        !            74: Operations above the separator are specific to each window.
        !            75: Operations below the separator are the following generic window operations:
        !            76: .TP 1i
        !            77: .B reshape
        !            78: Change the size of a window.
        !            79: .TP
        !            80: .B move
        !            81: Move a window to a different place.
        !            82: .TP
        !            83: .B close
        !            84: Delete a window.
        !            85: .TP
        !            86: .B fold 
        !            87: Like button 2 fold above except it applies to all lines in the window.
        !            88: .TP
        !            89: .B truncate
        !            90: Like button 2 truncate above except it applies to all lines in the window.
        !            91: .TP
        !            92: .B top
        !            93: The sub-menu off the \fBtop\fR
        !            94: is a list of windows;
        !            95: selecting one makes it top and current.
        !            96: .LP
        !            97: Button 3 also is also used to sweep out new windows.
        !            98: .PP
        !            99: Keyboard characters accumulate at the bottom of the window.
        !           100: If the current line accepts input, it flashes with each keystroke;
        !           101: otherwise, if the current window accepts input, its border flashes.
        !           102: Carriage return is ignored until a line or window
        !           103: accepts the text, whereupon
        !           104: the input line is sent to the line or window.
        !           105: .PP
        !           106: The following keyboard commands are also available:
        !           107: .TP
        !           108: .B "\'>file\'"
        !           109: This saves the contents of the current line, or current window if there is 
        !           110: no current line, into the named file. To achieve the status of no current line 
        !           111: in the window, scroll off the top or bottom of the window.
        !           112: .TP
        !           113: .B "\'<file\'"
        !           114: Each line of the named file is sent to the line or window as though it had
        !           115: come from the keyboard.
        !           116: .TP
        !           117: .B ?
        !           118: Each line or window that accepts keyboard input produces
        !           119: some help in response to
        !           120: .BR ? .
        !           121: These messages specify the format of what may be typed.
        !           122: Items in brackets ([]) are optional parameters in the keyboard input expression.
        !           123: Explanations are contained within braces ({}).
        !           124: 
        !           125: .PP
        !           126: Special cursor icons occasionally appear:
        !           127: .TP
        !           128: .B arrow-dot-dot-dot
        !           129: The host is completing an operation; the terminal is ready
        !           130: asynchronously.
        !           131: .TP
        !           132: .B coffee cup
        !           133: The terminal is receiving input from the host; the terminal momentarily is blocked.
        !           134: .TP
        !           135: .B exclamation mark
        !           136: Confirm a dangerous menu selection by pressing that menu's button again.
        !           137: 
        !           138: .SS Debugger Control Windows
        !           139: .TP
        !           140: .B Dmdpi Window
        !           141: The most important debugger control window is the dmdpi window, which is
        !           142: the first window created after the debugger downloads.
        !           143: Each line within the dmdpi window refers to a specific process running
        !           144: in the terminal.
        !           145: A process is identified by its 630 MTG process table address. 
        !           146: Along with each process is  a path to
        !           147: its host resident download module (argv[0]).
        !           148: This pathname is used by dmdpi to find the symbol table and debugger 
        !           149: information for the process.
        !           150: .RS
        !           151: .P
        !           152: Lines may be introduced to the dmdpi window by running
        !           153: .I list processes
        !           154: from the button 3 menu or by typing a process table address and symbol
        !           155: table path from the keyboard.
        !           156: Typing the information at the keyboard may be useful if one wishes to 
        !           157: change the pathname of where the process symbol table might be found.
        !           158: .P
        !           159: Lines are also introduced into the dmdpi window when opening
        !           160: or closing a process control window for a process which is
        !           161: currently not listed in the dmdpi window.
        !           162: .P
        !           163: Note that the list of processes in the dmdpi window is not
        !           164: dynamically updated as new processes are created or deleted,
        !           165: or when application programs exit. This can lead to invalid
        !           166: processes being listed in the dmdpi window until list
        !           167: processes is again chosen from the button 3 menu.
        !           168: .RE
        !           169: 
        !           170: .TP
        !           171: .B Pwd/cd Window
        !           172: The pwd/cd window controls
        !           173: the working directory of the debugger.
        !           174: The initial working directory is the directory in which dmdpi is executed.
        !           175: The working directory can be changed either by typing a path from the keyboard
        !           176: or by selecting directory listings in button 2 and button 3 menus.
        !           177: 
        !           178: 
        !           179: .TP
        !           180: .B Help Window
        !           181: The help window contains a reminder of user interface mechanics.
        !           182: 
        !           183: .SS Process Control Windows
        !           184: A process control window is created from the dmdpi window in
        !           185: one of two ways.
        !           186: .I Open process
        !           187: on the button 2 menu opens the process currently highlighted in the dmdpi
        !           188: window.
        !           189: .I Pick process
        !           190: on the button 3 menu causes the mouse cursor to change to a target cursor
        !           191: which can be used to point to a window containing a process to debug.
        !           192: .PP
        !           193: The paths to symbol tables shown in the dmdpi window is not a full path
        !           194: name if the location of the host resident download module for the program
        !           195: being debugged is specified to \fIdmdld\fR as a relative path name. If
        !           196: this is the case, the debugger is not able to find symbol tables
        !           197: unless the working directory of the debugger is the same as the 
        !           198: directory in which the application was downloaded. If symbol tables cannot be
        !           199: found, close the process window, change the working directory of the
        !           200: debugger from the pwd/cd window, and then reopen the process window.
        !           201: .PP
        !           202: A process control window indicates the process's state
        !           203: and shows the call stack traceback if the process is halted or dead.
        !           204: The call stack is the dynamic chain of activation records.
        !           205: The process control window also
        !           206: connects to process inspection windows that access source text,
        !           207: local variables within a stack frame,
        !           208: raw memory, and so on.
        !           209: These windows are cross-connected; so, for example,
        !           210: an instruction in a process's assembly language window can
        !           211: be inspected as a hexadecimal opcode in the raw memory window.
        !           212: Closing the process control window closes all the process inspection 
        !           213: windows associated with it.
        !           214: .PP
        !           215: States are:
        !           216: .TP 1.5i
        !           217: .PD 0
        !           218: .SM
        !           219: .B RUNNING
        !           220: running normally
        !           221: .TP
        !           222: .SM
        !           223: .B STOPPED
        !           224: stopped asynchronously by the debugger
        !           225: .TP
        !           226: .SM
        !           227: .B BREAKPOINT
        !           228: halted on reaching breakpoint
        !           229: .TP
        !           230: .SM
        !           231: .B STMT STEPPED
        !           232: halted after executing C source statement(s)
        !           233: .TP
        !           234: .SM
        !           235: .B INSTR STEPPED
        !           236: halted after executing machine instruction(s)
        !           237: .TP
        !           238: .SM
        !           239: .B PROCEESS EXCEPTION
        !           240: a process exception has occurred
        !           241: .TP
        !           242: .SM
        !           243: .B ERROR STATE
        !           244: the process has probably exited.
        !           245: .PD
        !           246: .LP
        !           247: When in the \fBRUNNING\fR state, the status of selected bits of the P->state
        !           248: variable is displayed and updated.
        !           249: .PP
        !           250: The menu operations on the process are:
        !           251: .TP 1i
        !           252: .PD 0
        !           253: .B run
        !           254: let the process run
        !           255: .TP
        !           256: .B stop
        !           257: stop the process
        !           258: .TP
        !           259: .B src text
        !           260: open source text window(s)
        !           261: .TP
        !           262: .B Globals
        !           263: open window for evaluating expressions in global scope
        !           264: .TP
        !           265: .B RawMemory
        !           266: open window for editing uninterpreted memory
        !           267: .TP
        !           268: .B Assembler
        !           269: open window for disassembler
        !           270: .TP
        !           271: .B User Types
        !           272: open window for setting user types
        !           273: .TP
        !           274: .B Journal
        !           275: open debugging session journal window
        !           276: .TP
        !           277: .B Bpt List
        !           278: open breakpoint list window
        !           279: .PD
        !           280: .LP
        !           281: Each line of the call stack traceback describes one function.
        !           282: Each function in the traceback can open a stack frame
        !           283: expression evaluator window
        !           284: or display its current source line.
        !           285: 
        !           286: .SS Process Inspection Windows
        !           287: .TP 
        !           288: .B Source Text Windows
        !           289: The source text window contains a listing of a source file. If there is more
        !           290: than one source file for the process, selecting the  
        !           291: .B src text
        !           292: item in the process control window will give you a source files window
        !           293: in which there is a listing of  all the source files associated with that
        !           294: process. Library function source files are included in this list, even
        !           295: though one might not actually have the source for these functions.
        !           296: By highlighting a source line and selecting 
        !           297: .B open source file 
        !           298: in the button 2 menu, you can open a source listing for that file.
        !           299: Each source file is in a separate window, which can be opened when needed.
        !           300: The source files are searched for in the working directory.
        !           301: Entering a pathname from the keyboard (when the Source files window is 
        !           302: current) enters a pathname prefix which points to a directory
        !           303: where the source can be found, without changing the working directory.
        !           304: .RS
        !           305: .P
        !           306: When opening a source file, 
        !           307: dmdpi 
        !           308: checks to see whether the source file is in time sync with the object module. 
        !           309: If not, dmdpi gives a message of this fact. One may override this 
        !           310: condition with the 
        !           311: .B reopen 
        !           312: item in the button 3 menu of the source text window.
        !           313: Source lines are displayed on a "per request basis." In other words, only
        !           314: the lines that are currently visible are sent from the host. More lines
        !           315: are sent to be displayed on the terminal as needed. 
        !           316: .P
        !           317: Specific strings may be searched for in the source text by
        !           318: using \fI/string\fR, or the \fI?string\fR entered at the
        !           319: keyboard, for searching forward and backward in the source
        !           320: text respectively. The search will begin at the next (previous
        !           321: for backwards search) C language statement rather than at the
        !           322: next source line. Note that repeated reverse searches for the
        !           323: same pattern must be specified as \fI??\fR rather than \fI?\fR
        !           324: due to a conflict with the help operator (?).
        !           325: Line numbers can also be searched
        !           326: for by entering a line number at the keyboard when a line is not current
        !           327: within the window. If a line is current, the number is evaluated as 
        !           328: a constant expression (see expressions below). To achieve the 
        !           329: status of no current line, scroll the current line off the top or bottom of
        !           330: the window.
        !           331: .P
        !           332: .B Breakpoints 
        !           333: are set on source lines. A breakpoint is set by highlighting
        !           334: the line on which you wish to break execution and selecting 
        !           335: .B set bpt
        !           336: from the button 2 menu. 
        !           337: A breakpoint is denoted by a '>>>' next to the source line.
        !           338: When the process reaches this line the process 
        !           339: halts and will not execute the line on which the breakpoint is set. 
        !           340: Clearing the breakpoint is done by highlighting the line on which a breakpoint
        !           341: is set and selecting 
        !           342: .B clear bpt
        !           343: from the button 2 menu. Clearing the breakpoint can also be done from the  
        !           344: breakpoint list
        !           345: window (see below). A 
        !           346: .B conditional breakpoint 
        !           347: is a breakpoint that is set with a certain condition. When this condition
        !           348: evaluates to TRUE, the process is halted.
        !           349: Any valid dmdpi expression may be used as a condition 
        !           350: (see keyboard expressions).
        !           351: To set a conditional breakpoint, select 
        !           352: .B cond bpt
        !           353: from the button 2 menu. You are prompted to enter an expression
        !           354: from the keyboard as a condition. 
        !           355: An example of a condition would be (x==1). When the variable x becomes 
        !           356: equal to 1, then execution breaks. The 
        !           357: .B trace on
        !           358: item in the button 2 menu is actually a conditional breakpoint with 
        !           359: the condition of 0, meaning that the condition never evaluates to TRUE.
        !           360: This has the effect of tracing a statement but never breaking execution.
        !           361: The conditional breakpoint is removed in the same way a 
        !           362: regular breakpoint is removed. 
        !           363: .P 
        !           364: Once the process has been halted, select \f3run\f1 to start the process running again.
        !           365: You can also 
        !           366: .B step 
        !           367: (execute) a number of source lines and then stop
        !           368: again after these statements have been executed.
        !           369: When statements are stepped, the debugger will not enter functions 
        !           370: unless the 
        !           371: .B step into fcn
        !           372: item is actually specified. The current statement can always
        !           373: be seen by selecting
        !           374: the
        !           375: .B current stmt
        !           376: item in the button 3 menu. This highlights the statement currently in the PC.
        !           377: .P
        !           378: Another option that is available in the source text window is the ability 
        !           379: to look at the assembly code for a specified line. Highlighting a line and 
        !           380: selecting 
        !           381: .B assembler
        !           382: in the button 2 menu displays the first assembler instruction of the 
        !           383: statement.
        !           384: .RE
        !           385: 
        !           386: .TP
        !           387: .B Globals and Stack Frame Windows
        !           388: A stack frame window is opened from a line in the call stack traceback 
        !           389: in the process control window or
        !           390: from a line of source text. A globals window is opened from the button 3 menu
        !           391: in the process control window.
        !           392: These windows evaluate expressions with respect to global scope,
        !           393: and scope in a function, respectively.
        !           394: .RS
        !           395: .P
        !           396: .B "Expressions"
        !           397: .P
        !           398: Expressions may be entered from the keyboard or with the mouse.
        !           399: The syntax for expressions in dmdpi is the same as C language expressions,
        !           400: except for differences noted below.
        !           401: The expressions are most commonly used for inspecting values of variables in 
        !           402: the program that is being debugged.
        !           403: An example of an expression is
        !           404: .I r.origin.x.
        !           405: This 
        !           406: may be typed in order
        !           407: to inspect the x coordinate value of a rectangle origin point if the process 
        !           408: has a rectangle 
        !           409: .I r.
        !           410: .P
        !           411: A summary of dmdpi's expression syntax is presented here only to 
        !           412: aid comprehension, rather than an exact statement of the language.
        !           413: .RE
        !           414: .sp
        !           415: .RS
        !           416: \fI
        !           417: expression :
        !           418:         constant
        !           419:         primary
        !           420:         \(**expression
        !           421:         &expression
        !           422:         -expression
        !           423:         !expression
        !           424:         ~expression
        !           425:         sizeof expression
        !           426:         typeof expression
        !           427:         fabs (expression)
        !           428:         (type-name) expression   /\(** from menu only \(**/
        !           429:         {expression} identifier
        !           430:         expression binop expression
        !           431:         expression = expression
        !           432:         expression , expression 
        !           433: 
        !           434: 
        !           435: primary:
        !           436:         $
        !           437:         identifier 
        !           438:         ( expression )
        !           439:         primary ( [expression-list] )
        !           440:         primary[ expression ]
        !           441:         lvalue.identifier
        !           442:         primary -> identifier
        !           443: 
        !           444: lvalue:
        !           445:         identifier
        !           446:         primary[expression]
        !           447:         lvalue.identifier
        !           448:         primary -> identifier
        !           449:         \(**expression
        !           450:         (lvalue)
        !           451: 
        !           452: binop:
        !           453:         \(**   /   %   +   -   >>   <<   <   > <=   >=   ==   !=   &   ^
        !           454:          |   &&   ||
        !           455: \fR
        !           456: .P
        !           457: The major differences in the expressions which dmdpi understands and
        !           458: the C expressions are:
        !           459: .IP ""
        !           460: The unary operators \fIfabs\fR and \fItypeof\fR are supported.
        !           461: .I fabs
        !           462: evaluates the absolute value of a floating point number.
        !           463: .I typeof
        !           464: evaluates the type of an expression.
        !           465: Examples are:
        !           466: .br
        !           467:        fabs(-2.0)=2
        !           468: .br
        !           469:        typeof(r.origin)= struct Point
        !           470: .IP ""
        !           471: The concept of a "current expression" has been introduced with the 
        !           472: .B $
        !           473: operator. 
        !           474: .B $ 
        !           475: is equal to the current highlighted expression. For example, if the line 
        !           476: containing \fIr.origin\fR is highlighted, one may type 
        !           477: .B $.x 
        !           478: to see the value of the x coordinate. 
        !           479: Another example of the 
        !           480: .B $
        !           481: expression is 
        !           482: .B $=<expression>.
        !           483: This can be used, for instance if
        !           484: .B $
        !           485: is equal to a variable x and you wish
        !           486: to change the value of x to <expression>.
        !           487: .IP ""
        !           488: Expressions are evaluated within the scope boundaries of the window in 
        !           489: which they are typed. One can cross scope boundaries in order to evaluate
        !           490: an expression with the syntax { expression } function-name. 
        !           491: This, for example, is useful for using the globals window to look 
        !           492: at static variables that are local
        !           493: to a function 
        !           494: without having to open up a stack frame window.
        !           495: .IP ""
        !           496: Type casting may only be done through the use of the menu.
        !           497: .IP ""
        !           498: The following is not supported by dmdpi: ++  --  ?:  op=  string.
        !           499: .IP ""
        !           500: NOTE: expressions are always evaluated internally with a 32-bit precision. 
        !           501: Therefore,
        !           502: results may not correspond in all cases with those generated by a C  
        !           503: program.
        !           504: .P
        !           505: Expressions are also used to specify the condition in the conditional 
        !           506: breakpoint. Note that the C comma operator is very useful in specifying
        !           507: the condition. 
        !           508: Expressions separated by a comma are evaluated left-to-right and all but
        !           509: the rightmost expression are discarded.
        !           510: For example, a condition of \fI(x,y,x==y)\fR evaluates all
        !           511: three expressions; however, only the last expression (x==y) determines
        !           512: the result of the overall condition. The result is that the values of 
        !           513: x and y are printed but execution halts only when x==y.
        !           514: .P
        !           515: Registers in the stack frame windows are prefixed with the character
        !           516: .B $
        !           517: , for example, 
        !           518: .B $d0. 
        !           519: The address of a register is the location at which it was saved.
        !           520: Register values are only available after execution has been halted
        !           521: at a breakpoint or after a step. The exception to this rule is that
        !           522: one may look at register variables in calling functions if they happened 
        !           523: to be saved in the called function.
        !           524: .P
        !           525: An expression may be made 
        !           526: .I spy, 
        !           527: in order to observe changes in the expression.
        !           528: The value of a spy expression is evaluated and displayed
        !           529: each time the debugger looks at the process, i.e., when the process calls 
        !           530: wait() or sleep().
        !           531: If the value of a spy changes, the expression is updated and a message is
        !           532: given that the expression has changed. 
        !           533: If a conditional breakpoint (or trace on) is set, then the process will be
        !           534: halted.
        !           535: The option 
        !           536: .B changed spies
        !           537: in the button 2 menu will manually force all spies to be re-evaluated. 
        !           538: .P
        !           539: A maximum of 150 global variables will fit into the globals menu. If
        !           540: the targeted program has more than 150 global variables, the remaining
        !           541: variables must be accessed by typing their name from the keyboard.
        !           542: .RE
        !           543: .SK
        !           544: .TP
        !           545: .B Raw Memory Window
        !           546: The raw memory window is
        !           547: a ``memory editor'' in which
        !           548: memory is viewed as a sequence of 1-, 2-, 4- or 8-byte cells.
        !           549: The 
        !           550: .B '.' 
        !           551: operator is a special symbol which denotes a cell address. Therefore, commands
        !           552: such as 
        !           553: .B .+1 
        !           554: in the button 2 menu give the next increment of memory after the current 
        !           555: cell address. The keyboard command
        !           556: .B .=<expression>
        !           557: displays the cell with address equal to expression. 
        !           558: The expression syntax is the same as defined above.
        !           559: The format of the displayed
        !           560: memory cells is 
        !           561: .I x/y: <contents>, 
        !           562: where x is the cell address, and y is the viewing increment. 
        !           563: .RS
        !           564: Some of the functions available are:
        !           565: .RS
        !           566: .TP
        !           567: change cell size and display format
        !           568: Use the \fBsize\fR and \fBformat\fR items in the menu.
        !           569: .TP
        !           570: display cells above and below current cell.
        !           571: Use the \fB.[+-]<amount>\fR options in the menu.
        !           572: .TP
        !           573: indirect to cell
        !           574: Look at the cell using the contents of the current cell as an address.
        !           575: Use the 
        !           576: .B \(** thru . 
        !           577: option.
        !           578: .TP
        !           579: change cell value
        !           580: This is done with the keyboard expression:
        !           581: .B $=<expression>
        !           582: .TP
        !           583: spy on memory cell
        !           584: If the memory contents change, dmdpi will give notification.
        !           585: .TP
        !           586: disassemble instruction at cell.
        !           587: Display the assembler instruction in the assembler window. Use the 
        !           588: .B asmblr
        !           589: option in the button 2 menu.
        !           590: .RE
        !           591: .RE
        !           592: .TP
        !           593: .B (Dis)Assembler Window
        !           594: Allows viewing of memory as a sequence of assembler instructions.
        !           595: The menu options of this window are similar to those in the source text 
        !           596: window. The difference is that this window deals with assembler instructions
        !           597: rather than the high-level source code.
        !           598: .RS
        !           599: .P
        !           600: An instruction at a certain address can be displayed by entering the 
        !           601: keyboard expression
        !           602: .B .=<expression>.
        !           603: The expression syntax is the same as defined above.
        !           604: More instructions can be viewed in a sequential manner using the 
        !           605: .B next
        !           606: options in the button 2 menu. The next 1, 5, or 10 instructions
        !           607: starting from the current instruction can be displayed.
        !           608: .P
        !           609: When setting a breakpoint or stepping into an assembler function, one must
        !           610: step through the link and the movm.l instructions before \fIdmdpi\fR will be
        !           611: able to generate the stack frame for the function.
        !           612: .P 
        !           613: Some of the other functions available are:
        !           614: .RS
        !           615: .TP
        !           616: change display format
        !           617: .TP
        !           618: open a stack frame window for instruction's function
        !           619: .TP
        !           620: display instruction as cells in the raw memory window
        !           621: .TP
        !           622: set/clear breakpoint on instruction
        !           623: .TP
        !           624: open stack frame window for instruction's function
        !           625: .TP
        !           626: display instruction at current PC 
        !           627: .TP 
        !           628: single step instruction(s)
        !           629: .RE
        !           630: .RE
        !           631: .TP
        !           632: .B User Types Window
        !           633: Shows user-defined types and allows the display format of user-defined 
        !           634: types displayed in the globals and stack frame windows to be changed.
        !           635: For example, the display format of a structure may be changed so that 
        !           636: certain fields are not displayed (hidden) and other fields are displayed
        !           637: (shown).
        !           638: .TP
        !           639: .B Journal Window
        !           640: Keeps a log of significant events in the course of a debugging session.
        !           641: .TP
        !           642: .B Breakpoint List Window
        !           643: Lists all active source and assembler breakpoints.
        !           644: Allows clearing of specified breakpoints or all breakpoints.
        !           645: .RS
        !           646: .P
        !           647: Functions available include:
        !           648: .RS
        !           649: .TP
        !           650: show source or assembler line at which a breakpoint is set 
        !           651: .TP
        !           652: clear a single breakpoint
        !           653: .TP
        !           654: clear all breakpoints
        !           655: .SH SEE ALSO
        !           656: .PP
        !           657: dmdcc(1),
        !           658: dmdld(1),
        !           659: ucache(1).
        !           660: .SH WARNINGS
        !           661: Do not use the -O optimizer option of dmdcc when compiling a program 
        !           662: to be debugged with dmdpi. 
        !           663: This will confuse dmdpi.
        !           664: .P
        !           665: It is possible to receive a message that there is no more memory on the 
        !           666: host system. This will happen if the process you are debugging has a very 
        !           667: large symbol table, or if you are debugging many processes at the same time.
        !           668: The maximum amount of memory that a UNIX process is allowed to consume
        !           669: can be changed by a system administrator. For a 3B2 host computer running
        !           670: System V Release 2.0, how to change the per process memory limit is
        !           671: documented in the manual \f2AT&T 3B2 Computer Unix System V Release 2.0 
        !           672: System Administration Utilities Guide\f1 in the chapter 
        !           673: "Administrative Tasks" under "Tunable Parameters." An alternative to
        !           674: changing the host computer's per process memory limit is to use
        !           675: the \fImc68cprs\fR CCS utility to compress the size of process symbol tables
        !           676: before they are opened for debugging with dmdpi.
        !           677: .SH BUGS
        !           678: In switch statements there is no boundary between the last case
        !           679: and the branch code; the program
        !           680: .I appears
        !           681: to jump to the last case (but is really in the branch)
        !           682: and then to the real case.
        !           683: .P 
        !           684: The structure P which is of type "struct Proc \(**" within applications is 
        !           685: interpreted by \fIdmdpi\fR as "struct proc". This implies that one must 
        !           686: type P.state rather than P->state when accessing the structure P from the 
        !           687: keyboard.
        !           688: .P
        !           689: If a program contains multiple global structure declarations
        !           690: of the same name, dmdpi will ignore all but the first declaration.
        !           691: .P
        !           692: A breakpoint cannot be set on a goto or return statement.
        !           693: Attempting to do so will set a breakpoint on the following
        !           694: line. Also, stepping onto a goto or return statement will
        !           695: execute the goto or return instead of stopping on the line.
        !           696: .P
        !           697: When stepping past an if statement that is the
        !           698: last statement within a while loop and the if condition fails
        !           699: and does not have an else condition,
        !           700: the program will appear to jump to the last line within the if
        !           701: statement. It is really jumping to the statement that will
        !           702: branch back to the top of the while loop.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.