使用地图文件VS2010 MFC
-
21-12-2019 - |
题
我已经开发了一个顾客在做一定的操作时经历的课程。这不是在同一个地方和同一数据上发生,而且,它不会发生,也没有在我的本地开发机器中也没有在我的测试虚拟机中(无线的所有开发设备)。
鉴于这些条件,我决定用映射编译(在配置属性 - >链接器 - >调试器中为option / 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
.
实际上,我的崩溃发生在偏移量: 00038C90
,所以我应该认为它在方法中的某个地方:
MosaicoDialogs::CDlgGestioneDatiProgetto::PersonalizzaPlancia
.
但这不是绝对可能的,所以假设电脑不能错,我是那个做错的人。
有人可以解释我如何以正确的方式阅读地图?
解决方案
读取映射文件以查找崩溃位置在此代码项目文章中解释了崩溃位置。
http://www.codeproject。COM /文章/ 3472 /查找 - 崩溃 - 信息 - 使用-Map-file
希望有帮助。
其他提示
不要打扰 - 相反,使用符号构建项目并将其绑住pdb文件。
在使用未处理的异常处理程序
将新编译的程序提供给客户,并且当它崩溃呼叫minidumpwritedump时。
要求客户将此.dmp文件发送给您,然后您只需在Visual Studio(或WindBG)中即可加载它,它将将符号与程序匹配,并且也将匹配代码。您应该能够看到确切的代码线和一些涉及的变量。 (如果使用vs,当您加载.dmp文件时,右上角将是“开始调试”的选项,因为它将在崩溃点'开始调试')
首先在本地 - 将div放入程序中的某个位置,看看是否可以在运行后调试转储。请注意,您必须为每个程序的构建保留完全相同的符号文件 - 它们完全匹配。您无法期望一个构建符号文件以匹配另一个构建,即使没有任何改变。
这类事物有教程,如这个来自codeproject ,看起来它描述了所需的。
对于PostMortem调试,还有一个替代方案将 not 需要使用地图文件。相反,它需要您创建一个简单的注册表脚本来启用一些 wer (Windows错误报告)标志来捕获崩溃转储文件。首先,使用调试符号构建您的应用程序。然后,请按照收集的说明用户模式转储。基本上,您在“LocalDumps”键下创建一个子密钥。此子密钥必须是应用程序的名称,例如“MyApplication.exe”。然后,创建“DumpCount”,“Dumptype”和“DumpFolder”键/值。用户是否运行注册表脚本。这将能够在本地捕获转储。然后,让用户迫使崩溃收集转储文件。然后,用户可以将转储文件发送给您使用前面创建的符号进行调试。最后,您需要创建一个注册表脚本,该脚本删除添加到注册表中添加的键/值。