gdb与信号

http://simohayha.iteye.com/blog/493091

 

gdb可以监测在你的程序中的任何信号。 

主要靠的命令是:

handle signal [keywords...] 

 

这里的keywords可以有以下内容:

1 nostop gdb接收到信号不会停止程序,而只是打印出一段message 

2 stop 和上面类似只不过会停止程序。 

3 print 当信号发生必须打印一条消息通知。 

4 noprint 信号发生,gdb将不会打印任何东西。 

5 pass和noignore 这两个是同义的。表示信号对你的程序是可见的。 

6 nopass和ignore 这两个也是同义的。和上面相反。。 

 

线程模式,

set scheduler-locking on|off|step

默认为off,也就是所有的线程都一起走。

 

set schedule-multiple mode 

这个是针对进程的线程,如果为on,那么所有进程的线程都能够执行。

 

none-stop模式。 

顾名思义,当程序在gdb中停止,只有当前的线程会被停止,而其他的线程将会继续运行。 
这个时候step,next这些命令就只对当前的线程起作用。 

我们要打开这个模式需要这样操作: 

# Enable the async interface.  
set target-async 1  
# If using the CLI, pagination breaks non-stop.  
set pagination off  
# Finally, turn it on!  
set non-stop on  

 

在all-stop模式中interrupt将会停止所有的线程。而在none-stop中只会停止当前线程。interrupt -a此时就能停止所有线程。’ 

当你有多个线程,你此时只想给某个线程设置断点,这个时候可以用这个命令: 

break linespec thread threadno 
break linespec thread threadno if ... 

 

linespec为源码行号,threadno为线程id。 

 

posted @   blcblc  阅读(657)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示