文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何为正在运行的进程加载调试符号?

2024-02-09 11:19

关注

php小编小新为您介绍如何为正在运行的进程加载调试符号。在软件开发过程中,调试是一个非常重要的环节。当我们遇到正在运行的进程出现问题时,我们需要加载调试符号来进行调试。调试符号包含了代码的符号信息,能够让我们在调试过程中更加准确地定位问题所在。在这篇文章中,我们将详细讲解如何为正在运行的进程加载调试符号,帮助您更好地进行调试工作。

问题内容

我有一个在许多机器上运行的 C 应用程序,有时一个实例会出现问题并且表现得很奇怪。不幸的是,这种情况几乎从未发生过。这些产品实例经过大量优化(-march=XXX -Ofast)进行编译,并且不包含任何调试符号,因此我无法轻松附加调试器来分析它们的状态。

但我认为应该可以使用相同的标志加上 -g3 再次编译应用程序,然后我可以使用 symbol-file application_executable_with_debug_symbols 将其加载到 gdb 中。但是,如果我这样做,那么断点永远不会触发。

是否有另一种方法可以将调试器附加到正在运行的应用程序并加载调试符号?或者我做错了什么(明显的)?

谢谢

解决方法

最佳实践是使用调试符号构建应用程序,保留生成的二进制文件以进行调试,但运行 strip -g app.debug -o app.release 并在生产中运行剥离的二进制文件。

当您发现行为异常的实例时,您可以将完整调试版本复制到目标计算机,然后运行 ​​gdb -ex 'attach $PID' app.debug。瞧:你有完整的调试符号。

再次编译应用程序不起作用的最可能原因是您获得了具有不同符号的新二进制文件(比较 nm app.debugnm app.release),以及最可能的原因 (如果使用 GCC)是您省略了一些用于构建 app.release 的优化标志,或者您使用了略有不同的源 - 您必须使用完全相同的标志(并添加-g)和完全相同的来源,以实现该方法的成功。

以上就是如何为正在运行的进程加载调试符号?的详细内容,更多请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯