the*_*ine 14 c++ linux debugging gdb
在使用GDB调试核心转储时,"最佳实践"是什么?
目前,我遇到了一个问题:
最近,当用户给我一个核心转储时,我尝试使用它进行调试
gdb --core=./core.pid ./my_app_debug-bin
Run Code Online (Sandbox Code Playgroud)
核心是由创建的my_app_release-bin.核心文件和二进制文件之间似乎存在某种不匹配.
另一方面,如果我尝试
gdb --core=./core.pid ./my_app_release-bin
Run Code Online (Sandbox Code Playgroud)
核心匹配,但我无法获得源代码行号(虽然我得到了函数名称).
这是实践的吗?因为我觉得我在这里缺少一些东西.
R S*_*hko 16
听起来你的发布版本和调试版本之间存在其他差异,然后只是-g标志的缺席/存在.假设是这种情况,你现在无法做任何事情,但你可以调整你的构建来更好地处理这个问题:
这是我们在工作场所所做的事情.
-g在构建发布版本时包含该标志.strip --strip-unneeded在将二进制文件发送给客户之前运行它.现在,当我们遇到崩溃时,我们可以使用带符号的存档版本来进行调试.
需要注意的一点是,如果您的发布版本包含优化,即使使用符号也可能难以进行调试.例如,优化器可以重新排序您的代码,因此即使调试器会说您在第N行崩溃,您也不能假设代码实际执行了N-1行.
| 归档时间: |
|
| 查看次数: |
10169 次 |
| 最近记录: |