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

时间:2017-06-30 18:49:06

标签: c++ debugging dll visual-studio-2015 360-degrees

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

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

进行这些更改后,代码中的一行似乎永远都会运行。使用调试器我发现在那行代码中没有返回任何东西的成员函数,因此程序流只是停留在那一行。我尝试使用此函数,但它已在SDK随附的.dll文件中定义。

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

所以现在我被困在一行代码中,因为.dll文件中定义的成员函数不会返回任何内容而只是继续运行(我已经让它继续运行了小时,但它仍然没有返回任何东西)。

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

我所做的更改的更多细节:

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

2 个答案:

答案 0 :(得分:0)

如果DLL的提供程序没有提供源代码,您显然无法看到它。这将是处理它的常用方法 - 除非它们是开源的,它们的源代码是公司的知识产权,所以当然它们没有向您展示。

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

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

答案 1 :(得分:0)

正如VTT和Aganju所说,我不能进入DLL中定义的成员函数,除非源代码是通过DLL提供给我的。这回答了我的要求。对于我的具体情况,我正在使用NVIDIA VRWorks 360 Video SDK,问题是由于没有正确的编解码器来解决被缝合的视频文件。尽管在SDK文档中没有提及,但应使用的视频编解码器是H264 - MPEG-4 AVC(第10部分)(AVC1)。