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
  • 相关阅读:
    阿里笔试题—战报交流
    2 基于梯度的攻击——PGD
    1 基于梯度的攻击——FGSM
    0 对抗样本
    自然语言处理 复习笔记 3
    自然语言处理 复习笔记 2
    自然语言处理 复习笔记 1
    GRU
    1*1卷积核的作用
    BP原理
  • 原文地址:https://www.cnblogs.com/gdut-gordon/p/9151940.html
Copyright © 2011-2022 走看看