gdb调试多线程

时间:2022-01-08 16:39:01

gdb与多线程


  • 在多线程编程时,当我们需要调试时,有时需要控制某些线程停在断点,有些线程继续执行。有时需要控制线程的运行顺序。有时需要中断某个线程,切换到其他线程。这些都可以通过gdb实现。

下面是gdb常用的功能:

  • info threads:显示可以调试的所有线程。gdb会为每个线程分配一个ID(和tid不同),编号一般从1开始。后面的ID是指这个ID。
  • thread ID:切换当前调试的线程为指定ID的线程。
  • break FileName.cpp:LinuNum thread all:所有线程都在文件FileName.cpp的第LineNum行有断点。
  • thread apply ID1 ID2 IDN command:多个线程执行gdb命令command。
  • thread apply all command:所有线程都执行command命令。
  • set scheduler-locking off|on|step:在调式某一个线程时,其他线程是否执行。off,不锁定任何线程,默认值。on,锁定其他线程,只有当前线程执行。step,在step(单步)时,只有被调试线程运行。
  • set non-stop on/off:当调式一个线程时,其他线程是否运行。
  • set pagination on/off:在使用backtrace时,在分页时是否停止。
  • set target-async on/ff:同步和异步。同步,gdb在输出提示符之前等待程序报告一些线程已经终止的信息。而异步的则是直接返回。