Backtrace
|
Size: 1766
Comment: how to attach to a running program
|
Size: 2286
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 10: | Line 10: |
| apt-get install gdb | sudo apt-get install gdb |
| Line 21: | Line 21: |
| (gdb) info registers | |
| Line 25: | Line 26: |
| = backtrace of an already running program = | = Already running programs = |
| Line 27: | Line 28: |
| This applies to debugging i.e. panel applets. | You can ask GDB to attach to a program that's already running. This is useful for debugging things that start up, but crash when you perform a particular task. |
| Line 33: | Line 34: |
| 1. Find the PID (process ID) of <program>: {{{ ps ax | grep <program> |
1. Find the process ID of <program>: {{{ pidof <program> |
| Line 38: | Line 39: |
| gdb | tee gdb-<program>.txt | gdb 2>&1 | tee gdb-<program>.txt (gdb) handle SIG33 pass nostop noprint (gdb) set pagination 0 |
| Line 46: | Line 49: |
| 1. The program will continue running. Perform any actions necessary to reproduce the crash |
|
| Line 48: | Line 53: |
| (gdb) info registers | |
| Line 52: | Line 58: |
Note that you can also set logging to a file like this: {{{ (gdb) set logging file gdb-<program>.txt (gdb) set logging on }}} = Other resources = * [http://live.gnome.org/GettingTraces Another useful how-to] |
A backtrace shows a listing of which program functions are still active. Since functions are nested when they are called, the program must record where it left one function, to jump into an inner one. It does this on the stack, which we dump for the backtrace,
By getting a backtrace at the point of a bug, a developer may be able to isolate where that bug is, because it will narrow down to the function, or even the line, that caused the erroneous behaviour.
Generation
Please ensure you have packages with debug symbols installed. You can do this by following the instructions at DebuggingProgramCrash.
Make sure the GNU Debugger is installed.
sudo apt-get install gdb
Start the program under control of gdb:
gdb <program> 2>&1 | tee gdb-<program>.txt (gdb) handle SIG33 pass nostop noprint (gdb) set pagination 0 (gdb) run <arguments, if any>
- The program will start. Perform any actions necessary to reproduce the crash
Retrieve a backtrace of the crash:
(gdb) backtrace (gdb) info registers (gdb) thread apply all backtrace
Attach the complete output from GDB, contained in gdb-<program>.txt, in your bug report.
Already running programs
You can ask GDB to attach to a program that's already running. This is useful for debugging things that start up, but crash when you perform a particular task.
Make sure the GNU Debugger is installed.
sudo apt-get install gdb
Find the process ID of <program>:
pidof <program>
Start gdb:
gdb 2>&1 | tee gdb-<program>.txt (gdb) handle SIG33 pass nostop noprint (gdb) set pagination 0 (gdb) attach <PID>
Continue the <program>:
(gdb) continue
- The program will continue running. Perform any actions necessary to reproduce the crash
Retrieve a backtrace of the crash:
(gdb) backtrace (gdb) info registers (gdb) thread apply all backtrace
Attach the complete output from GDB, contained in gdb-<program>.txt, in your bug report.
Note that you can also set logging to a file like this:
(gdb) set logging file gdb-<program>.txt (gdb) set logging on
Other resources
[http://live.gnome.org/GettingTraces Another useful how-to]
Backtrace (last edited 2022-12-20 22:15:16 by sergiodj)