一. cmake生成可调试版本的程序,该内容参考自https://www.linuxidc.com/Linux/2014-03/98622.htm

具体内容如下:

1, 使用CMAKE编译确实很方便。但CMAKE默认编译出来的程序不带有符号文件,用GDB无法调试。

2,  要编译时产生符号文件供调试,调用CMAKE时,带上 -DCMAKE_BUILD_TYPE=Debug .

例如:terminal跳转到build文件夹,输入:

cmake -DCMAKE_BUILD_TYPE=Debug .. 

这样产生的makefile文件make生成的可执行文件就带有调试信息,供gdb和gdbserver使用了。

*****另外有另一种更好的方法是在工程主CMakeLists.txt中的PROJECT语句后加入一句

SET(CMAKE_BUILD_TYPE Debug)

CMake 中有一个变量 CMAKE_BUILD_TYPE ,可以的取值是 Debug Release RelWithDebInfo 和 MinSizeRel。当这个变量值为 Debug 的时候,CMake 会使用变量 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG 中的字符串作为编译选项生成 Makefile ,当这个变量值为 Release 的时候,工程会使用变量 CMAKE_CXX_FLAGS_RELEASE 和 CMAKE_C_FLAGS_RELEASE 选项生成 Makefile。

二. 调试多线程程序

我用gdb调试多线程程序时,报错“interrupted system call”,我参考了https://blog.csdn.net/zb872676223/article/details/37906091

解决方法:将gdb设置为non-stop模式,设置方式如下。

打开~/.gdbinit(如果没有这个文件则自己新建一个同名文档),然后添加一下三行即可。

set target-async 1
set pagination off
set non-stop on

【疑难杂症】gdb调试多线程程序报错:interrupted system call的更多相关文章

  1. 使用gdb调试多线程程序总结

    转:使用gdb调试多线程程序总结 一直对GDB多线程调试接触不多,最近因为工作有了一些接触,简单作点记录吧. 先介绍一下GDB多线程调试的基本命令. info threads 显示当前可调试的所有线程 ...

  2. Debugging with GDB 用GDB调试多线程程序

    Debugging with GDB http://www.delorie.com/gnu/docs/gdb/gdb_25.html GDB调试多线程程序总结 一直对GDB多线程调试接触不多,最近因为 ...

  3. gdb调试多线程程序总结

    阿里核心系统团队博客 http://csrd.aliapp.com/?tag=pstack Linux下多线程查看工具(pstree.ps.pstack) http://www.cnblogs.com ...

  4. vs code调试console程序报错--preLaunchTask“build”

    网上有其他大神给出的建议是注释掉launch.json中的 "preLaunchTask": "build", 但是这种方式也会造成一个问题,就是再使用F5调试 ...

  5. gdb 调试core文件报错: in free () from /lib64/libc.so.6 找不到原因啊

    运行程序死掉  找不到原因啊..gdb 跟踪与堆栈信息 贴出来了 麻烦大佬们看一下,给个回复,不胜感激!! Core was generated by `./scene_s0037 10037'.Pr ...

  6. GDB调试多线程程序

    gdb有thread相关命令,如info thread(简写成info th)显示线程消息,b xx thread yy可以针对某个thread设置断点,thread xx(简写成thr xx)切换到 ...

  7. VS调试 启动vs报错--未启动IIS

    VS调试 启动程序报错——未启动IIS Express Web服务 解决办法: 1.关闭VS. 2.删出项目文件下的".vs"文件. 3.重新启动解决方案. 4.编译,运行OK. ...

  8. Gdb调试多进程程序

    Gdb调试多进程程序 程序经常使用fork/exec创建多进程程序.多进程程序有自己独立的地址空间,这是多进程调试首要注意的地方.Gdb功能强大,对调试多线程提供很多支持. 方法1:调试多进程最土的办 ...

  9. GDB调试多线程

    先介绍一下GDB多线程调试的基本命令. info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID. 前面有*的是当前调试的线程. th ...

随机推荐

  1. 为django项目创建虚拟环境

    1. 先创建一个存放虚拟环境的目录  /opt/venl mkdir /opt/venl 2. cd 到该存放虚拟环境的目录下,并创建一个虚拟环境 virtualenv是如何创建“独立”的Python ...

  2. 『TensorFlow』函数查询列表_神经网络相关

    tf.Graph 操作 描述 class tf.Graph tensorflow中的计算以图数据流的方式表示一个图包含一系列表示计算单元的操作对象以及在图中流动的数据单元以tensor对象表现 tf. ...

  3. css实现0.5px

    使用缩放来0.5来实现,注意兼容各种浏览器 .frz-list li:after { content: ''; position: absolute; bottom:; height: 1px; wi ...

  4. C++将数组的元素顺序随机打乱

    参考: https://blog.csdn.net/cordova/article/details/52884399 https://zhidao.baidu.com/question/1604258 ...

  5. QSplineSeries QChartView绘制曲线

    参考资料: https://www.qtdebug.com/qtbook-paint-smooth-curve-qchart/ https://blog.csdn.net/liang19890820/ ...

  6. Win10系列:C#应用控件基础21

    ListView控件 ListView控件的常用方式是与后台数据进行绑定,并将所绑定的数据内容与前端界面布局相结合,按照特定的顺序将数据集合以列表形式展示在界面当中,如电子邮件列表或搜索结果列表等. ...

  7. HTML DOM 属性

    innerHTML 属性 获取元素内容的最简单方法是使用 innerHTML 属性. innerHTML 属性对于获取或替换 HTML 元素的内容很有用. 实例 下面的代码获取 id="in ...

  8. ServiceStack.Redis遇到的问题:ServiceStack.Redis.Generic.RedisTypedClient`1”的方法“get_Db”没有实现。

    问题: ServiceStack.Redis.Generic.RedisTypedClient`1”的方法“get_Db”没有实现. 解决方案: step 1::引用的三个 包版本保持一致 Servi ...

  9. phython安装

    点击   https://www.python.org/downloads/ 下载合适的Python版本 下载获取到:python-x.x.x.msi安装包,我们双击python-x.x.x.msi即 ...

  10. jsoncpp

    1.y.z is built with C++11. 0.y.z can be used with older compilers 1.y.z 版本是基于C++11的:0.y.z 是基于老版本的,为了 ...