【问题标题】:How do I debug an executable with gdb when it crashes during startup?启动期间崩溃时如何使用 gdb 调试可执行文件?
【发布时间】:2019-09-12 21:59:19
【问题描述】:

我有一个基于 C 和 C++ 的项目,这是我第一次构建和链接,它在执行时出现段错误。我尝试在 gdb 中运行它以获取回溯,结果如下:

gdb) run
Starting program: /home/jon/controlix-code/bin/controlix 
During startup program terminated with signal SIGSEGV, Segmentation fault.
(gdb) bt
No stack.
(gdb) 

我认为它在 main() 被调用之前崩溃了,但除此之外我没有任何线索。我在谷歌上找不到太多关于这种情况的信息,所以我想我会在这里问。

【问题讨论】:

  • 使用构造函数或重要的初始化逻辑检查所有全局变量。我假设您有大量代码,而 minimal reproducible example 是不可能的?
  • 你为什么用两种完全不同的语言写作。该问题可能是在构建全局变量期间引起的。为什么你有全局变量?这可能意味着您的全局变量的初始化顺序存在错误。查看如何对全局变量进行排序。
  • 请展示您的代码,专注于导致段错误的最小代码。其他人可能会从你的实际错误中学到更多(比如你的代码做错了什么),然后是你如何使用 gdb 或其他技术来确定原因,但两者都比两者都更有帮助。

标签: c++ c linux gdb


【解决方案1】:

一种方法是在运行之前捕获所有异常:

catch throw
run

如果这没有帮助,您可能必须从一开始就单步执行程序集。但在你这样做之前,

break main
run

使用 stepnext 单步执行代码应该会导致您找到罪魁祸首。

【讨论】:

    猜你喜欢
    • 2011-05-07
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多