使用 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++ 调试问题 - pdb 文件

尝试调试调用 C++ DLL 的 VBA,“未加载 wntdll.pdb”

调试由 C# Visual Studio 2010 插件导入的 C++ dll

调试时如何从 C# 应用程序步入 C/C++ DLL

Visual Studio 2019 VS的.pdb文件是什么?(用于调试)

Visual Studio 2019 VS的.pdb文件是什么?(用于调试)