dbx - Use the debugger
Format
dbx [options] [attach-type] process-id
dbx [options] -C core-file
Description
- Examine object files.
- Run a program in a controlled environment.
- Set breakpoints at selected statements or run the program one line at a time.
- Debug using symbolic variables and display them in their correct format.
- View an MVS™ dump.
- Attach to a running program, and perform debugging operations.
The core-file argument is an MVS dump that exists as a file in the z/OS UNIX file system or in an MVS data set.
dbx allows the end user to customize its behavior via two files that are processed during initialization. These are .dbxsetup. Each file can contain a list of dbx subcommands that will be run before the dbx prompt is displayed. During startup, dbx will first search for these files in the current working directory and then in the user's $HOME directory. If a file is found, it is parsed and the search for that specific file terminates. Use a text editor to create a .dbxsetup or .dbxinit file.
Any subcommand in the .dbxsetup file are executed before the debug target program is loaded. This allows the user to tailor dbx's operational behavior during this phase of the dbx startup process. Any subcommand in the .dbxinit file are executed just before the dbx prompt is displayed.
man dbxalias
dbx supports SVC dumps and SYSMDUMP dumps. It does not process SYSUDUMP dumps or CEEDUMP dumps. (The dump data set must be FB with a record length of 4160.)
Attach-types
- -a ProcessID
- Attaches the debug program to a running process. The debug program becomes active as soon as the process wakes up. To attach the debug program, you need authority to use the kill command on this process.
- -A ProcessID
- Reattaches the debug program to a running process that is already being debugged by dbx . Use this option to reattach a child process that was created when a debugged parent process did a fork while multiprocess debugging mode was active. To reattach to the debug program, you need authority to use the kill command on this process.
Options
- -b
- Suppresses processing of .dbxsetup and .dbxinit files (bare startup).
- -c script
- Runs dbx subcommands from a specified script file before reading from standard input.
- -C dump-filename
- Puts dbx in dump reading (core file) processing mode.
- -d
- Deprecated. This option is ignored and remains only for compatibility purposes.
- -f
- Deprecated. This option is ignored and remains only for compatibility purposes.
- -F
- Starts debug target in a different address space than the one dbx currently resides in; or starts dbx in its own address space when attaching to a running target program.
- -h
- Prints the dbx command syntax.
- -I directory
- Appends the given directory to the list of directories searched for source and debug files. The default list contains the working directory and the directory containing the object files. The search path can also be set with the use subcommand.
- -m dbxmode
- Instructs dbx to start in a specific mode:
- Specifying -m4 forces dbx to run in 31-bit mode, even on a machine capable of running it in 64-bit mode.
- Specifying -m8 forces dbx to run in 64-bit mode. If this is impossible, dbx will terminate.
- -p ipaddress | name[:port]
- Tells dbxto open a socket and connect to the
ipAddress:port
ormachineName:port
which is assumed to be a GUI that supports remote debugging. For example: dbx -p 9.123.456.78:8001 mypgm. In this mode, the command-line prompt is not displayed and the user cannot enter dbxsubcommands through the command-line interface. In addition, the following dbx subcommands are not supported when entered via a GUI debug console (command line) interface: detach, edit, multproc, object, quit, rerun, run, sh.If :port is not specified, port 8001 is used as the default.
- -q
- Suppresses some of the dbx startup messages. Only the dbx version information is printed before the prompt is displayed. All other messages are suppressed. This option does not affect the verbosity of normal dbx operation.
- -r
- Runs the object file immediately. If it ends successfully, the dbx debug
program is exited. Otherwise, the debug program is entered and the reason for termination is
reported. Unless -r is specified, the dbx command prompts the user and waits for a command. However, you can specify program arguments on the .dbxsetup files that are used by dbx and .dbxinit even when -r is not used. For example:
dbx myprog arg1 arg2 arg3
- -u
- Deprecated. This option is ignored and remains only for compatibility purposes.
Expression handling
Specify expressions in dbx with a subset of C and Pascal syntax. A prefix * (asterisk) or a postfix ^ (circumflex) denotes indirection. Specify portions of an array by separating the lower and upper bounds with .. (two periods).
Use [ ] (square brackets) or ( ) (parentheses) to enclose array subscripts. Use the field reference operator . (period) with pointers and records. The field reference operator . (period) makes the C operator → unnecessary (although it is supported).
When displaying variables
and expressions, the dbx command resolves names
first using the static scope of the current function. The dynamic
scope is used if the name is not defined in the first scope. If static
and dynamic searches do not yield a result, an arbitrary symbol is
chosen and the system prints the message (using Module.Variable).
The Module.Variable construction is the
name of an identifier qualified with a block name. Override the name
resolution procedure by qualifying an identifier with a block name.
Source files are treated as modules named by the file name without
the language suffix (such as the .c
suffix on a C
language program).
The dbx command debug program checks types of expressions. Override types of expressions by using TypeName (Expression). When there is no corresponding named type, use the &TypeName special construct to represent a pointer to the named type. Represent a pointer to enum, struct, or union tag with the $$TagName construct.
A condition can be any dbx expression that evaluates to a true or false value. This pertains to four dbx subcommands: stop, stopi, trace, and tracei.
Expression | Operators |
---|---|
exp (exponentiation) Algebraic | + (addition), - (subtraction), * (multiplication), / (floating point division), div (integral division), mod (modulo division), exp (exponentiation) |
Bitwise | ? (unary minus), ? (bitwise or), & (bitwise and), ? (bitwise xor), ~ (one's complement), << (bitwise left shift), >> (bitwise right shift), bitand (bitwise and), xor (bitwise xor) |
Logical | ?? (logical or), && (logical and), ! (logical not), or, and, not |
Comparison | < (less than), > (greater than), <= (less than or equal to), >= (greater than or equal to), <> (not equal to), != (not equal to), = (equal to), == (equal to) |
Other | sizeof |
Files
- a.out
- The object file a.out is the default name of an executable file produced by the compiler. If no executable is specified on the dbx command line, then dbx will look for an a.out file to debug.
- .dbxinit
- Contains initial commands.
- .dbxsetup
- Contains initial commands.
- .dbxhistory
- Contains a listing of recently used dbx commands. Used by the history dbxsubcommand.
Examples
- This example shows you how to attach dbx to
a running process. To do this, it is useful to insert a sleep(30)
call into the program to be debugged. This will give you enough time
to issue the ps -Aef shell command to find
the process ID of the program. Once you have the process ID, issue
the shell command: dbx -a process-id. Before starting the server, set the following four environment variables:
export _BPX_PTRACE_ATTACH=yes
(tells the kernel to always load DLLs and executables into read/write storage)export _CEE_RUNOPTS="test(all)"
(tells Language Environment® to load the CEEEVDBG debugger exit and send dbx debug events)export _CEE_DEBUG_FILENAME31=/bin/dbx31vdbg
(the path to the Language Environment debugger exit for 31-bit programs)export _CEE_DEBUG_FILENAME64=/bin/dbx64vdbg
(the path to the Language Environment debugger exit for 64-bit programs)
Use dbx commands to set breakpoints, step through program statements, print variables, work with threads, examine storage, and actions as needed.
- Example of creating the .dbxinit file
in your home directory:
alias nsf "use /sandbox3/UNIX_notes/CGOOD/notes/nsf/" alias asc "set $asciichars ; set $asciistrings" alias ebc "unset $asciichars ; unset $asciistrings" set $repeat set $history_unique set $hold_next set $showbases
- Sample dbx commands issued after starting server and seeing the
sleeping for 30 seconds message for server process ID 50331876:
/sandbox3/UNIX_notes/CGOOD/notes/os> dbx -a 50331876 FDBX0278: Waiting to attach to process 50331876 ... FDBX0089: dbx for MVS. FDBX0399: Compiled: Sep 28 2001 10:22:24 GMT as BFP FDBX0400: OS level: 12.00 03, LE level: 4.1.2 with CWIs. FDBX0100: Type 'help' for help. FDBX0099: reading symbolic information ... FDBX0900: reading symbols for /sandbox3/UNIX_notes/CGOOD/usr/lpp/lotus/notes/latest/os390/server ... FDBX0037: XPLink module found FDBX0900: reading symbols for /sandbox3/UNIX_notes/CGOOD/usr/lpp/lotus/notes/latest/os390/libnotes ... attached in sleep at 0xebcd024 ($t1) sleep() at 0xebcd024 unnamed block $b64, line 873 in "meminit.c" MemoryInit1(), line 873 in "meminit.c" OSInitExt() at 0x1000cdc4 ServerMain() at 0xf80ac38 main() at 0xf80a12e .() at 0xeeb2f4a .() at 0x6f8e976 0x0ebcd024 (+0xff3c3024) 47060003 nop X'3'($r6,) (dbx) stop at "meminit.c":875 [1] stop at "meminit.c":875 (dbx) c [1] stopped in unnamed block $b64 at line 875 in file "meminit.c" ($t1) (dbx) where unnamed block $b64, line 875 in "meminit.c" MemoryInit1(), line 875 in "meminit.c" OSInitExt() at 0x1000cdc4 ServerMain() at 0xf80ac38 main() at 0xf80a12e .() at 0xeeb2f4a .() at 0x6f8e976 (dbx) list 872,875 872 __printf_a("sleeping for 30 seconds time to dbx\n"); 873 sleep(30); 874 __printf_a("Done sleeping \n"); 875 if (loc_num_of_segs > MAX_NUM_OF_SEGM) (dbx) print loc_num_of_segs 4 (dbx) &loc_num_of_segs/8x 0fc55af8: 0000 0004 0000 01b0 0400 0000 0f9d 57f8 (dbx) 0xfc55af8/8x 0fc55af8: 0000 0004 0000 01b0 0400 0000 0f9d 57f8 (dbx) n stopped in unnamed block $b64 at line 971 in file "meminit.c" ($t1) 971 DoAgain2: (dbx) n stopped in unnamed block $b64 at line 972 in file "meminit.c" ($t1) 972 hMMShMemId = shmget(ShmemAccessKey, FirstSegSize, IPC_CREAT|IPC_EXCL|loc_shm390flags|perms);
Usage notes
- alias
- args
- condition
- dump
- examine
- list
- listfiles
- listfuncs
- listi
- map
- mutex
- onload
- readwritelock
- rerun
- registers
- run
- sh
- status
- thread
- whatis
- where
- whereis
- which
- detach
- edit
- multproc
- object
- quit
- rerun
- run
- sh
Related information
c89/cc/c++