Appearance
GDB 多线程调试
断点
- 建立断点:
bash
# 使用函数名创建
(gdb) b func_name
Breakpoint 3 at 0x5555555575f9: **.cpp, line 179.
# 指定代码行数
(gdb) b **.cpp:179 # 这里要用绝对路径
Breakpoint 4 at 0x5555555575f9: **.cpp, line 179.- 查看断点信息:
bash
(gdb) info breakpoints
# 或者
(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000555555556b77 in generator(int) at **.cpp:59
breakpoint already hit 1 time
2 breakpoint keep y 0x0000555555557668 in scheduler() at **:183
breakpoint already hit 1 time
3 breakpoint keep y 0x00005555555575f9 in check_this_queue_empty(int) at **:179- 删除断点:
bash
(gdb) delete 3 # 后面的数字是i b 中的Num
# 或者
(gdb) d 3- 多线程调试
bash
# 查看线程信息
(gdb) info threads
# 或者
(gdb) i th
Id Target Id Frame
1 Thread 0x7ffff7a02740 (LWP 6016) "new" 0x00007ffff7b88d71 in __futex_abstimed_wait_common64 (private=128, cancel=true, abstime=0x0, op=265, expected=6021,
futex_word=0x7ffff7200990) at ./nptl/futex-internal.c:57
* 3 Thread 0x7ffff72006c0 (LWP 6021) "new" scheduler () at **:243 # 当前线程有一个星号标记bash
# 切换到指定线程
(gdb) thread 1执行
bash
# 继续执行直到下一个断点
(gdb) continue
(gdb) c
# 单步执行 进入到函数体内部,包括调用的外部函数
(gdb) step
(gdb) s
# 单步执行 不进入函数体内部,直接执行到下一行代码
(gdb) next
(gdb) n查看运行信息
bash
# 查看变量值
(gdb) print var_name
(gdb) p var_name
# 查看堆栈
(gdb) backtrace
(gdb) bt其他
bash
# 终止程序
(gdb) kill
# 退出 gdb
(gdb) quit