打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
GDB调试signal的处理函数
userphoto

2023.05.10 广东

关注

我们写代码时,有时会自定义signal的处理函数,然后调试时想调试这个处理函数,该怎么做呢?


例子

main.c代码如下,运行系统是debian11。main.c里自定义了信号SIGINT和SIGTERM的处理函数,

#include <signal.h>
#include <stdlib.h>
#include <unistd.h>

bool Running = true;


static void sigHandler(int sign) 
{
    Running = false;
}

int main() 
{
    signal(SIGINT, sigHandler);
    signal(SIGTERM, sigHandler);

    while (Running) 
    {
        sleep(1);
    }

    return 0;
}

PS:我们平时使用CTRL+C去中断程序,其实就是向程序发送了SIGINT信号。

本人使用VSCode的native debug插件进行调试,事先要安装好gdb,这里先打2个断点

  • 第一个打在sigHandler里的"Running = false;"这一行
  • 第二个打在"sleep(1);"这一行

如下,


然后启动调试(第二个断点也可以启动运行后一段时间再打),调试启动后,会运行到"sleep(1)"这一行,

此时打开gdb的控制台(VSCode里使用Ctrl+`打开),输入"signal SIGINT"并回车,

这时就会进入信号处理函数里,

PS: 对于其它各种信号,可以在gdb的控制台输入"info signals"去查看。

关键一点是:发送信号前要把程序停下来,可以根据需要停在程序的某个位置。


其它参考

gdb下对信号还有其它配置,可以参考这里

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
不可靠信号与可靠信号对比
shell脚本里后台进程忽略SIGINT信号问题排查 | 写点什么
Linux信号之signal函数
signal函数详细用法
unix中的信号处理机制
Linux 信号处理
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服