再写GDB多线程调试

链接-写的真好

链接1

链接2-gdb的non-stop模式的介绍

gdb的.gdbinit的使用

文中提到了gdb中start与run的区别,kill -9与kill -11的区别,可以读读

1.一些命令 

命令说明
info threads查看当前程序中的所有的线程
thread 线程ID切换到不同的线程进行调试
show scheduler-locking查看当前线程的调度锁的使用模式

set  scheduler-locking  on

请求调度锁开启,表示调试当前线程时,其它线程锁定不能运行
set  scheduler-locking  off请求调度锁关闭,表示调试当前线程时,其它线程不锁定能继续运行(默认值)
set  scheduler-locking  step设置线程调试模式,单步模式,只有被调用线程执行,防止其他线程在执行命令的时候抢占当前线程
thread  apply  all  command所有线程都执行command命令
thread  apply  all  bt查看所有线程的堆栈
thread apply ID1,ID2,ID3... command指定具体线程去执行command命令

set target-async 1

set pagination off

set non-stop on

当前线程受控,其他线程不受干扰

2.问题:scheduler-locking和non-stop参数有什么区别和联系呢?

non-stop针对某个线程遇到断点的时候,其他线程的阻塞情况。比如说线程1,线程2,线程3都在运行的时候,如果在线程2的某个地方设置了断点,如果事先设置了set non-stop on,那么线程1和线程3就不会受到线程2的断点的影响,线程1和线程3继续执行各自线程该做的事情。但是non-stop的设置对正在运行的线程不能设置,会报【多线程进行时,不能改变这个设置】,它的设置像是一个预先的值,是对整个进程而言的。

3.问题:为什么kill -11能产生coredump文件但kill -9不产生coredump文件呢?

“kill -11”、“kill -9”这些数字实际上代表的是信号的值:
#define SIGKILL        9
#define SIGSEGV        11
“9” 表示的是强制终止进程,SIGKILL信号不能被屏蔽,不能被忽略;
“11” 表示的是强制生成coredump文件,相当于是向未定义的内存去写入数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值