Starting dbx |
2 |
![]() |
Topics covered in this chapter are:
Basic Concepts
How you start dbx depends on what you are debugging, where you are, what you need dbx to do, how familiar you are with dbx, and whether or not you have set up any dbx environment variables.
Starting a Debugging Session
The simplest way to start a dbx session is to type the dbx command at a shell prompt.
$ dbx |
dbx Start-up Sequence
Upon invocation, dbx looks for and reads the installation startup file, dbxrc in the directory install-directory/lib. If a Core File Exists
If a file named core exists in the directory where you start dbx, it is not read in by default; you must explicitly request the core file. Use the where command to see where the program was executing when it dumped core. Process ID
You can attach a running process to dbx using the process_id (pid) as an argument to the dbx command.
$ dbx your_program_name pid |
$ dbx - pid |
Because the program name remains unknown to dbx, you cannot pass arguments to the process in a run type command.
Setting Startup Properties
pathmap
By default, dbx looks in the directory in which the program was compiled for the source files associated with the program being debugged. If the source/object files are not there or the machine you are using doesn't use the same pathname, you must inform dbx of their location.
(dbx) pathmap [ -c ] from to |
If -c is used, the mapping is applied to the current working directory as well.
dbxenv
The dbxenv command can be used to either list or set dbx customization variables. Customize your dbxenv setting by placing them in your .dbxrc file. To list variables, type:
dbxenv |
You can also set dbx environment variables. See Chapter , "Customizing dbx" on page 161 for more information about setting these variables.
alias
You can create your own dbx commands using the kalias or dalias commands.
Debugging Optimized Code
dbx provides partial debugging support for optimized code. The extent of the support depends largely upon how you compiled the program.
The -g0 (zero) option is for C++ support.
To compile optimized code for use with dbx, compile the source code with both the -O (uppercase letter O) and the -g options.
For example, to compile using C++:
% CC -O -g example_source.cc |
Code Compiled Without the -g Option
While most debugging support requires that a program be compiled with -g, dbx still provides the following level of support for code compiled without -g:
To quit a dbx session, type quit at the dbx prompt.
(dbx) quit |
When you start dbx and attach it to a running process using the process_id option, the process survives and continues when you quit the debugging session. dbx performs an implicit detach before quitting the session.
Stopping Execution
You can stop execution of a process at any time using Ctrl+C without leaving dbx. Detaching a Process From dbx
If you have attached dbx to a process you can detach the process from dbx without killing it or the dbx session using the detach command.
(dbx) detach |
Killing a Program Without Terminating the Session
The dbx kill command terminates debugging of the current process as well as killing the process. However, kill preserves the dbx session itself leaving dbx ready to debug another program.
(dbx) kill |
Saving and Restoring a Debugging Run
dbx provides three commands for saving all or part of a debugging run and replaying it later:
The save command saves more than the list of debugging commands issued. It saves debugging information associated with the state of the program at the start of the run -- breakpoints, display lists, and the like. When you restore a saved run, dbx uses the information in the save-file.
You can save part of a debugging run; that is, the whole run minus a specified number of commands from the last one entered. Example A shows a complete saved run. Example B shows the same run saved, minus the last two steps:
If you are not sure where you want to end the run you are saving, use the history command to see a list of the debugging commands issued since the beginning of the session.
To save all of a debugging run up to the save command:
(dbx) save |
To save part of a debugging run
(dbx) save -number |
Saving a series of runs gives you a set of checkpoints, each one starting farther back in the session. You can restore any one of these saved runs, continue, then reset dbx back to the program location and state saved in an earlier run.
To save a debugging run to a file other than the default save-file:
(dbx) save filename |
Restoring a Saved Run
After saving a run, you can restore the run using the restore command. dbx uses the information in the save-file. When you restore a run, dbx first resets the internal state to how it was at the start of the run, then reissues each of the debugging commands in the saved run.
Note - The source command also reissues a set of commands stored in a file, but it does not reset the state of dbx; it merely reissues the list of commands from the current program location.
Prerequisites for An Exact Restoration of a Saved Run
For exact restoration of a saved debugging run, all of the inputs to the run must be exactly the same: arguments to a run-type command, manual inputs, and file inputs.
To restore a saved debugging run:
Note - If you save a segment and then issue a run, rerun, or debug command before you do a restore, restore uses the arguments to the second, post-save run, rerun, or debug command. If those arguments are different, you may not get an exact restoration.
(dbx) restore |
To restore a debugging run saved to a file other than the default save-file:
(dbx) restore filename |
Saving and Restoring using replay
The replay command is a combination command, equivalent to issuing a save -1 followed immediately by a restore. The replay command takes a negative number_of_ commands argument, which it passes to the save portion of the command. By default, the value of -number is -1, so replay works as an undo command, restoring the last run up until but not including the last command issued.
(dbx) replay |
(dbx) replay -number |
Command Reference
Syntax
$ dbx [- options] [program name [corefile | process id]]
Start-up Options