繁体   English   中英

如何从发行版本的回溯中恢复符号?

[英]How can I recover symbols from a backtrace of a release build?

我有我编译并交给朋友的应用程序的源代码。 在应用程序中,有一个信号处理程序,它将堆栈跟踪保存到磁盘(通过backtrace或Windows版本)。 发生异常并将程序将堆栈保存到磁盘后,我的朋友给了我文件的副本,我想将地址转换回符号。 我怎么做?

没有崩溃转储文件,可能会很困难,因为每次启动时ASLR(地址空间布局随机化)可能会将代码放在不同的地址上。

解决此问题的最佳方法是制作一个崩溃转储文件,然后调试器(Visual Studio或WinDbg)可以将地址转换回给您正确的函数。 在我自己的应用程序中,每当发生崩溃时,我都会从代码中创建一个崩溃转储文件(在DBGHELP.DLL中查找函数MiniDumpWriteDump),但是您也可以使用外部实用程序(任务管理器从Windows,Process Explorer或SysInternals的ProcDump)。

然后,您可以轻松地将转储文件加载到调试器中,并使用它将地址转换为函数名称。 例如,在Visual Studio中,打开反汇编窗口,然后键入函数的地址。

其他一些实用程序也使用相同的技巧。 例如,非常困CS( https://github.com/Cyber​​Shadow/verysleepy )可以在没有准备好符号的环境中对应用程序进行性能分析时制作崩溃转储文件。 然后将地址解析为函数名称。 地址映射到DLL / EXE中的偏移量(通过使用故障转储文件),并映射到函数名称(通过使用PDB文件)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM