首页 > 后端开发 > Golang > 正文

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

WBOY
发布: 2024-02-09 11:18:08
转载
957人浏览过

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

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

问题内容

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

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

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

谢谢

一览运营宝
一览运营宝

一览“运营宝”是一款搭载AIGC的视频创作赋能及变现工具,由深耕视频行业18年的一览科技研发推出。

一览运营宝 41
查看详情 一览运营宝

解决方法

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

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

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

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

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:stackoverflow网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号