使用 pdb 调试调试 C++ COM dll 但没有源代码
Posted
技术标签:
【中文标题】使用 pdb 调试调试 C++ COM dll 但没有源代码【英文标题】:Debugging a debug C++ COM dll with pdb but without source code 【发布时间】:2015-11-13 17:36:34 【问题描述】:我在(比如 Connection.dll)中运行应用程序时遇到崩溃
在崩溃之前,以下断言来自 C:\Program Files\Microsoft Visual Studio 11.0\VC\atlmfc\include\atlcom.h 行号:4735(见下文)
ATLASSERT(pdispparams->cArgs == (UINT)info.nParams);
现在客户端已经提供了 Connection.dll 的 pdb 文件。
但是客户端没有提供Connection.dll的源代码。
我想找出问题的根本原因(至少在 Connection.dll 中的函数名)。
对此的任何帮助将不胜感激。
谢谢, 桑迪普帕瓦尔
【问题讨论】:
一个 PDB 文件从二进制文件中的位置映射到源文件中的位置。如果没有源文件,我认为它对你没有多大好处。 根本原因很容易看出,您正在调用一个参数数量错误的方法。这永远不会有一个好的结局。您需要从新类型库更新您的 MFC 包装器。 【参考方案1】:如果您可以让 VisualStudio 加载 PDB,它将向您显示函数名称、堆栈和参数,以便为您提供一些线索。将 PDB 与 DLL 放在一起可能会起作用,或者您可能需要将其添加到符号路径中。如果 PDB 与 DLL 的版本不完全匹配,它通常会拒绝加载它,这是一个 PITA。
【讨论】:
以上是关于使用 pdb 调试调试 C++ COM dll 但没有源代码的主要内容,如果未能解决你的问题,请参考以下文章
尝试调试调用 C++ DLL 的 VBA,“未加载 wntdll.pdb”
调试由 C# Visual Studio 2010 插件导入的 C++ dll