zoukankan      html  css  js  c++  java
  • 【疑难杂症】gdb调试多线程程序报错:interrupted system call

    一. 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
  • 相关阅读:
    Catch That Cow POJ 3278(BFS)
    python的各种推导式(列表推导式、字典推导式、集合推导式)
    贝叶斯神经网络
    浅谈贝叶斯
    置换检验
    Python的基本用法
    字符串和编码
    开启新篇章
    无偏博弈类问题
    PAT1103
  • 原文地址:https://www.cnblogs.com/gdut-gordon/p/9151940.html
Copyright © 2011-2022 走看看