【问题标题】:Linux/C++ How to debug release applicationLinux/C++ 如何调试发布应用程序
【发布时间】:2009-05-27 09:33:24
【问题描述】:

我有 linux c++ 多线程应用程序。现在它在生产服务器上进行了测试并且有段错误。问题是我无法在我的任何测试服务器上重现该错误并且无法访问生产服务器。我没有转储或任何其他有用的信息。只有一行: 0000000046bf0fb8 处的段错误 rip 000000000048ac6b rsp 0000000046bf0fa0 错误 6

我想问社区我可以从这条线上获得一些信息,这将有助于减少我应该搜索的可能地方的面积。由于速度慢,我无法在生产环境中运行调试构建。我可以添加什么来帮助我调试的版本?这个错误看起来像多线程错误,并且很难重现。但我不确定,因为应用程序可以处理来自 MTA 的许多不同的电子邮件。

平台:Linux

编译行:g++ -O3 -D_REENTRANT

谢谢。

upd.:感谢您的回答。我可以包含调试信息。我想知道调试发布版本的基本方法。例如我有转储和发布版本。我该如何继续。我应该读什么?如果可能的话,你能用几句话解释你如何调试你的应用程序吗?谢谢。

【问题讨论】:

    标签: c++ linux multithreading


    【解决方案1】:

    正如 Andy 所说,在构建发布版本时保留调试符号。

    如果这使完成的可执行文件的大小变得无法接受,那么您可以制作最终可执行文件的副本并通过strip 运行它以删除调试符号。这样你就有了 两个 相同的可执行文件,除了一个有调试符号而另一个没有。将没有符号的放在生产服务器上。当它出现段错误时,针对仍包含调试符号的可执行文件副本进行调试。

    【讨论】:

      【解决方案2】:

      我最近一直在阅读 gdb 手册,他们建议将调试符号保留在例如g++ -g.

      由于您无权访问生产服务器,因此可能包含一些将数据输出到文本文件的基本日志记录功能。您应该能够大致缩小错误发生的位置,具体取决于已输出到日志文件的数据。

      【讨论】:

        【解决方案3】:

        即使您没有使用调试标志构建应用程序,您也可以使用 gdb 在程序出现段错误的位置获取程序的回溯。这至少可以让您了解应用程序的段错误。

        gdb <your_app_exe>
        gdb> run
        gdb> backtrace
        

        gdb <your_app_exe>
        gdb> core-file <generated_core_file>
        

        【讨论】:

          【解决方案4】:

          您可以(并且应该)使用调试信息构建发布可执行文件。如果您不想分发包含调试信息的可执行文件,则可以separate 调试信息并稍后安装以进行调试。这就是我们在应用程序中所做的。

          【讨论】:

          • 谢谢。我可以包含调试信息。我想知道调试发布版本的基本方法。例如我有转储和发布版本。我该如何继续。我应该读什么?如果可能的话,你能用几句话解释你如何调试你的应用程序吗?谢谢。
          • @Dmitriy 调试发布版本与调试调试版本没有任何不同。您可能会遇到在单步执行代码时看不到某些变量的情况,因为编译器可能已将它们优化到远离该位置,但除此之外它等同于调试非发布版本。
          【解决方案5】:

          我找到了另一个我经常使用的解决方案,我们通常会得到堆栈(在这种情况下我们得到了)。

          我有一个我们在某些嵌入式平台上部署的可执行文件。 假设我的可执行文件是服务器。 我使用 addr2line -e ./server 我粘贴从客户那里得到的堆栈。 它将为您提供发生问题的行的详细信息。

          也许对你有帮助。

          谢谢

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-09-12
            • 1970-01-01
            • 2020-03-02
            • 2010-09-19
            • 2012-02-09
            • 2019-09-09
            • 2012-09-09
            相关资源
            最近更新 更多