不作文,只记要点。

1.Ice::Application的程序框架默认对SIGHUP, SIGINT, SIGTERM进行处理。目的就是捕捉Ctrl+C发出信号有序地结束程序。这个功能扰乱了我们使用gdb进行调试。

1.1 Ice::Application通过CtrlCHandler类,使用pthread_sigmask对所有其它线程都阻塞上面三个信号。

1.2 可以参看线程sigwaitThread,以及Ice::Application类几个虚函数如何扩展Ctrl+C信号的处理。

2. gdb调试时,我们往往会通过Ctrl+C来手动中断正在运行的调试程序,但不幸的是这会发出一个SIGINT信号,即使你希望通过命令"handler ignore SIGINT"来阻止信号到达调试程序,但是你只能失望,结果是你希望Ctrl+C来中断调试程序,却结束了调试程序。

3. ddd调试,ddd是一个gdb前端,作为一个前端,你的前端窗口功能也可能会发中断信号到gdb,从而到达调试程序。例如你要观察调试程序的标准输出,你从view|excution window打开了一个窗口,这个窗口专门用来显示调试程序的输出。但是当你调整这个窗口的大小时,意外的事情发生,后端gdb居然接收到了一个SIGINT信号,也就是说当你调整窗口时,前端会中断一个后端的调试,窗口就绪后继续调试进行。这样一来,中断信号被调试的程序捕捉并结束了。

4. kdevelop调试,同样是一个gdb前端,当在调试程序在运行中,你希望通过代码界面添加某行的中断断点,这时候意外又来了。因为你使用gdb命令,都必须在gdb对调试程序中断的状态下进行,所以你在界面操作添加一个中断断点,其实就等同于,你Ctrl+C去中断程序,然后在gdb命令,添加断点,再继续调试。这样一来界面因为你的操作向后台gdb发送了一个Ctrl+C信号,又至使Ice::Application捕捉信号结束运行。

5. ddd提供四个调试窗口,变量监视窗口,源代码窗口,反汇编窗口,还有就是gdb命令控制窗口。在有源代码的情况下进行调试,是方便很多的,因为它自己在每一处暂停都会自动反汇编并关联到代码。虽然我们可以组合(disass /m, f等)命令,但调试体现还是ddd好。一但找不到源代码时,ddd的行为就不可期望(unexpecred)。要么一直忙,要么失去控制,反正就是无法调试下去。拿远程调试android为例,ndk提供的cxx-stl的库,它的源代码路径在 “/usr/local/google/buildbot/src/android/ndk-r15-release/out/build/tmp/build-130720/build-gnustl/static-armeabij4.9/build/include”。一但单步跳进了stl库的函数,由于找不到源代码,ddd的行为就很古怪,没办法继续调试下去。如果使用gdb还好,报错就是了,如下图,却不影响调试。

准备和建立远程调试,操作步骤比较烦,如果正调试到入正题的时候,调试器前端闹别扭,那就是相当烦的事了。而且远程调试通过 tty(或者叫COM),响应速度那个就是一个等字。

gdb(ddd,kdevelop等)调试ZeroIce开发的应用程序,中断信号引起的问题的更多相关文章

  1. 学习4412开发板gdb和gdbserver的调试

    因为有很多的小伙伴是从单片机转过来的,用惯了单片机上的JLINK调试程序,换到Linux上非常的不习惯.确实,如果能设置断点,单步调试,查看变量,那确实是太爽了,那么在我们的Linux可以做到吗,答案 ...

  2. 用qemu+gdb tcp server+CDT调试linux内核启动-起步

    用qemu+gdb tcp server+CDT调试linux内核启动-起步 说明: 环境信息与 用virtualbox+模拟串口+CDT调试linux内核 TCP IP协议栈-起步 提到的一样,并且 ...

  3. CLion远程调试嵌入式开发板程序

    CLion远程调试嵌入式开发板程序 目录 CLion远程调试嵌入式开发板程序 1. 目的 2. 前提条件 3. CLion设置 3.1 设置一个Deployment 3.2 上传需要的目录到目标板子 ...

  4. 在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure

    [题外话] 上次介绍了VS上开发Node.js的插件Node.js Tools for Visual Studio(NTVS),其提供了非常方便的开发和调试功能,当然很多情况下由于平台限制等原因需要在 ...

  5. 调试多线程 & 查死锁的bug & gcore命令 & gdb对多线程的调试 & gcore & pstack & 调试常用命令

    gdb thread apply all bt 如果你发现有那么几个栈停在 pthread_wait 或者类似调用上,大致就可以得出结论:就是它们几个儿女情长,耽误了整个进程. 注意gdb的版本要高于 ...

  6. XE8 & IOS开发之免费证书真机调试:开发证书、AppID、开发授权profile的申请,附Debug真机调试演示(XCode7 Beta版或以上版本适用,有图有真相)

    网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,苹果发布Xcode ...

  7. GDB:从单线程调试到多线程调试(MFiX单步调试)

    GDB:从单线程调试到多线程调试 1. 裸跑GDB 1.1 安装GDB sudo apt-get install gdb 1.2 编译程序 由于需要调试,因此编译的时候需要添加-g编译参数: 1.3 ...

  8. 搭建Spark源码研读和代码调试的开发环境

    转载自https://github.com/linbojin/spark-notes/blob/master/ide-setup.md 搭建Spark源码研读和代码调试的开发环境 工欲善其事,必先利其 ...

  9. 学汇编的时候可以拿IDA之类的反汇编工具辅助学习,再用gdb或者IDA动态调试,跟踪每条指令的 执行结果。都不难

    作者:潘安仁链接:https://www.zhihu.com/question/40720890/answer/87926792来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

随机推荐

  1. std::to_string

    头文件 #include <string> std::string to_string( int value ); std::string to_string( long value ); ...

  2. Shiro 并发登录控制

    本文转载于:https://www.w3cschool.cn/shiro/epht1ifg.html

  3. 怎么在.NetCore3.0 中使用Log4net 写日志 及读取配置文件的信息

    1:安装Log4Net的 NuGet 包: 我们通常之需要安装这一个包即可,其他的主包会自动被添加进来: insatll-package  Microsoft.Extensions.Logging.L ...

  4. fenby C语言 P26

    指针 地址 类型+“*”+变量名=指针变量 int *p1;//指向整型变量的指针变量p1 float *p2;//指向浮点型变量的指针变量p2 char *p3;//指向字符型变量的指针变量p3 “ ...

  5. 最强中文NLP预训练模型艾尼ERNIE官方揭秘【附视频】

    “最近刚好在用ERNIE写毕业论文” “感觉还挺厉害的” “为什么叫ERNIE啊,这名字有什么深意吗?” “我想让艾尼帮我写作业” 看了上面火热的讨论,你一定很好奇“艾尼”.“ERNIE”到底是个啥? ...

  6. JNI技术实现--Java调C/C++

    废话不多说,首先我们来看Java调用C/C++步骤: 1.编写Java代码,在代码中使用native关键字标明该方法是调用本地库,不需要实现. 2.使用javah -jni 命令,生成对应的头文件,此 ...

  7. [考试反思]NOIP模拟测试19:洗礼

    []260 []230[]210 []200[8]170[9]160 这套题一般,数据很弱,T1T2暴力都能A,而且都是一些思维题,想不到就爆0. 原因不明,很多一直很强的人在这一次滑铁卢了,于是我个 ...

  8. SpringBoot整合Swagger实战

    源码地址:https://github.com/laolunsi/spring-boot-examples 目前SpringBoot常被用于开发Java Web应用,特别是前后端分离项目.为方便前后端 ...

  9. 2019.11.11&12题解

    Day1 考的不是很好,T1T2没区分度,T3想的太少,考试后期几乎都是在摸鱼,bitset乱搞也不敢打,只拿到了35分,跟前面的差距很大 A. 最大或 标签: 二进制+贪心 题解: 首先x,y中一定 ...

  10. MinIO 参数解析与限制

    MinIO 参数解析与限制 MinIO server 在默认情况下会将所有配置信息存到 ${HOME}/.minio/config.json 文件中. 以下部分提供每个字段的详细说明以及如何自定义它们 ...