首页UC › gdb 线程锁与non-stop模式

gdb 线程锁与non-stop模式

1.前提
gdb -v 查看版本信息
7.0以前不支持non-stop模式

2.线程锁
set scheduler-locking on/off 打开关闭
7.0以前的gdb默认当程序继续运行的时候如果有断点,那么就把所有的线程都
停下来,直到你指定某个线程继续执行(thread thread_no apply continue).
但是如果直接在当前线程执行continue的话,默认是会启动所有线程。
所以如果有多个线程都是断在同一个断点(函数)上,就是说这个函数是多线程的,
那么调试的时候就会出现异常情况。所以需要打开线程锁。
只让当前的线程执行,这意味着其他所有线程都不能执行了!

3. non-stop模式
set target-async 1
set pagination off
set non-stop on
同2不一样,gdb启动了不停模式,其实就是说,除了断点有关的线程会被停下来,
其他线程会执行执行。在网络程序调试的时候比较有用!

4.所以可以根据gdb的版本及你的实际代码情况选择到底是线程锁还是non-stop模式

5. 屏蔽SIGPIPE
gdb中的套接字等关闭了,往里面写就会报错!
handle SIGPIPE nostop noprint ignore

发表评论