是否可以进入 .dll 文件中定义的成员函数?

Is it possible to step into a member function defined in a .dll file?

我从 NVIDIA 下载了一个 SDK,我正在使用 Visual Studio 2015 到 运行 SDK 中提供的演示项目文件。

SDK 中的演示项目文件按预期工作,直到我对代码进行了一些小的更改(如果您想了解更改的详细信息,请参阅最后一段)。

进行这些更改后,代码中的一行似乎永远 运行。使用调试器,我发现该行代码中有一个成员函数没有 returning 任何内容,因此程序流就停留在该行。我尝试进入这个函数,但它是在 SDK 附带的 .dll 文件中定义的。

Visual Studio告诉我没有加载符号文件,在微软服务器上找不到PDB文件。调试器让我看到了反汇编代码,但我不知道我是否可以使用它来识别问题。

所以现在我卡在了一行代码中,因为 .dll 文件中定义的成员函数不会 return 任何东西,只是继续 运行ning(我已经离开了它 运行 持续了一个多小时,但仍然 return 什么都没有)。

我想找出发生这种情况的原因,但我看不到成员函数的源代码,所以我不知道成员函数内部发生了什么,也不知道如何调试它。有什么办法可以确定这个问题的原因吗?是否有可能以某种方式以我可以理解发生了什么的方式查看成员函数的源代码?

有关我所做更改的更多详细信息:

我将其与问题的主体分开,因为我认为它不是很相关,但它可能对回答者有用。 SDK 将多个视频拼接成一个视频(创建 360 度全景视频)。只要我使用演示视频文件,演示项目就可以正常工作。使用命令行参数将视频文件输入到项目中。当我将自己的视频文件提供给演示项目时,就是我遇到这个问题的时候,否则成员函数 returns 成功并且项目成功创建拼接视频。我唯一改变的是项目的输入(即视频文件),我根本没有改变源代码。

如果DLL的提供者不提供源代码,你显然是看不到的。那将是处理它的常用方法 - 除非他们是开源的,否则他们的源代码是公司的知识分子属性,所以他们当然不会给你看。

如果它是开源的,您通常可以下载调试 DLL(其中包含源代码)。 Microsoft 还提供了许多带源代码版本的运行时 DLL(但当然不是 Windows 本身)。检查 SDK 是否有该 DLL 的调试版本,并且 link 使用它而不是您当前使用的版本。

所以,简而言之,除非他们给你,否则你看不到它。

如VTT和Aganju所述,除非随DLL一起提供源代码,否则我无法进入DLL中定义的成员函数。这回答了我的问题。对于我的具体案例,我使用的是 NVIDIA VRWorks 360 Video SDK,问题是由于没有适合拼接的视频文件的正确编解码器造成的。尽管 SDK 文档中没有提到这一点,但应该使用的视频编解码器是 H264 - MPEG-4 AVC(第 10 部分)(AVC1)。