gdb
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
gdb [2017/10/24 17:22] – dblume | gdb [2024/10/22 19:07] (current) – [Attaching to a remote target] dblume | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== gdb ====== | ====== gdb ====== | ||
+ | |||
+ | ===== Example code with a deadlock ===== | ||
+ | |||
+ | Build your target with debug symbols. For example, with [[http:// | ||
+ | |||
+ | make debug | ||
+ | |||
+ | If the deadlock was compiled in, then run it like so: | ||
+ | |||
+ | product/ | ||
+ | |||
+ | Then you can run gdb and attach to the process in one of the following ways. | ||
+ | |||
+ | $ gdb -p < | ||
+ | | ||
+ | $ gdb product/ | ||
+ | | ||
+ | $ gdb | ||
+ | (gdb) attach < | ||
+ | | ||
+ | |||
+ | ===== Tips ===== | ||
Show all the backtraces: | Show all the backtraces: | ||
Line 12: | Line 34: | ||
(gdb) t a a bt -3 # thread apply all backtrace top three frames | (gdb) t a a bt -3 # thread apply all backtrace top three frames | ||
- | ==== Detecting a Deadlock ==== | + | ===== Detecting a Deadlock |
Get high level info on the threads: | Get high level info on the threads: | ||
Line 72: | Line 94: | ||
(gdb) c | (gdb) c | ||
+ | ===== Processing a backtrace from code ===== | ||
+ | |||
+ | When using a define like this... | ||
+ | |||
+ | <code cpp> | ||
+ | #define PRINT_BACKTRACE { void *stack[32]; | ||
+ | const int nptrs = :: | ||
+ | if (nptrs) :: | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | You might get output like this: | ||
+ | |||
+ | / | ||
+ | Application[0x4c51d0] | ||
+ | | ||
+ | You can get source code lines if you can calculate the offsets from each module. You can get those module base addresses from / | ||
+ | |||
+ | target:$ egrep " r-xp .*/ | ||
+ | 00010000-00dfb000 r-xp 00000000 00:0d 135649148 | ||
+ | b3578000-b3f45000 r-xp 00000000 00:0d 68148928 | ||
+ | |||
+ | So, for example, the first frame is at: libUILib.so + (0xb3831a78 - 0xb3578000). You can use addr2line to get that: | ||
+ | |||
+ | $ addr2line -e path/ | ||
+ | path/ |
gdb.1508890932.txt.gz · Last modified: 2023/04/12 20:44 (external edit)