gpt4 book ai didi

c++ - 使用MAP文件 VS2010 MFC

转载 作者:太空狗 更新时间:2023-10-29 23:40:01 24 4
gpt4 key购买 nike

我开发了一个客户在做某项手术时遇到的程序。这不会总是发生在同一个地方和相同的数据上,而且,它既不会发生在我的本地开发机器中,也不会发生在我的测试虚拟机(没有所有开发设备)中。

考虑到这些情况,我决定使用 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

实际上,我的崩溃发生在偏移处:

00038C90
所以我应该认为它在方法的某个地方:

MosaicoDialogs::CDlgGestioneDatiProgetto::PersonalizzaPlancia

但这不是绝对可能的,所以假设计算机不会出错,我就是做坏事的人。

谁能告诉我如何正确阅读 MAP?

最佳答案

不要打扰 - 相反,使用启用的符号构建项目并将它们剥离到 pdb 文件中。

稍微修改一下程序,当它崩溃时使用 unhandled exception handler 编写一个小型转储。

将新编译好的程序交给客户,当它崩溃时调用MiniDumpWriteDump。

请客户将此 .dmp 文件发送给您,然后您只需将其加载到 Visual Studio(或 WinDbg)中,它就会将符号与程序匹配,也会匹配代码。您应该能够看到确切的代码行和所涉及的一些变量。 (如果使用 VS,当您加载 .dmp 文件时,右上角将有一个“开始调试”选项,单击它,因为它会在崩溃点“开始调试”)

首先在本地尝试 - 在程序的某处放置一个零错误的 div,看看是否可以在运行后调试转储。请注意,您必须为程序的每个构建保留完全相同的符号文件——它们完全匹配。您不能期望一个构建的符号文件与另一个构建匹配,即使没有任何更改。

这种东西有教程,比如this one from CodeProject看起来它描述了您的需求。

关于c++ - 使用MAP文件 VS2010 MFC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24019648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com