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在输出提示符之前等待程序报告一些线程已经终止的信息。而异步的则是直接返回。