Iss*_*mTP 2 c++ mfc visual-studio-2010 map-files
我已经开发了一个客户,他在进行某项操作时会遇到这个问题.这不会发生在同一个地方和相同的数据上,而且,它不会发生,也不会发生在我的本地开发机器上,也不会发生在我的测试虚拟机(没有所有开发设备)中.
鉴于这些条件,我决定使用MAP进行编译(在配置属性 - >链接器 - >调试器中启用选项/ MAP)以查看哪个函数导致崩溃.
如果我已经正确理解,当程序崩溃时我要检查偏移错误然后在我的MAP中搜索RVA + BASE列:
Address Publics by Value Rva+Base Lib:Object
0001:00037af0 ?PersonalizzaPlancia@CDlgGestioneDatiProgetto@MosaicoDialogs@@IAEXXZ 00438af0 f DlgGestioneDatiProgetto.obj
0001:00038000 ?SalvaTemporanei@CDlgGestioneDatiProgetto@MosaicoDialogs@@IAEXXZ 00439000 f DlgGestioneDatiProgetto.obj
Run Code Online (Sandbox Code Playgroud)
实际上,我的崩溃发生在偏移:
00038C90Run Code Online (Sandbox Code Playgroud) 所以我认为它在方法中的某个地方:
MosaicoDialogs::CDlgGestioneDatiProgetto::PersonalizzaPlanciaRun Code Online (Sandbox Code Playgroud)
但这并非绝对可能,所以假设计算机不能出错,我就是那个做得不好的人.
有人能解释我如何以正确的方式阅读MAP吗?
不要打扰 - 相反,在启用符号的情况下构建项目并将其剥离到pdb文件中.
稍微修改程序,在使用未处理的异常处理程序崩溃时编写一个minidump
将新编译的程序提供给客户,并在崩溃时调用MiniDumpWriteDump.
请客户将此.dmp文件发送给您,然后您只需将其加载到Visual Studio(或WinDbg)中,它就会将符号与程序匹配,并且还会匹配代码.您应该能够看到确切的代码行和所涉及的一些变量.(如果使用VS,当你加载.dmp文件时,右上角将是"开始调试"的选项,点击它,因为它将在崩溃时"开始调试")
首先在本地尝试 - 在程序中的某处放置一个div by zero错误,看看是否可以在运行后调试转储.请注意,您必须为程序的每个版本保留完全相同的符号文件 - 它们完全匹配.即使没有任何更改,您也不能指望一个构建的符号文件与另一个构建匹配.
有这样的教程,比如CodeProject中的这个教程,看起来它描述了你需要的东西.
| 归档时间: |
|
| 查看次数: |
1161 次 |
| 最近记录: |