用于分析Visual Studio for C ++中dll加载条件的最佳工具

时间:2010-02-25 21:25:19

标签: c++ visual-studio visual-c++

我正在使用Visual Studio 2008来运行一个应用程序,该应用程序在启动时加载了许多DLL,并立即退出“程序”[3668] cb_tcl.exe:Native已退出代码-1072365566(0xc0150002)。 “不幸的是,我没有得到关于问题根源的其他线索,退出发生在程序启动之前,但我怀疑其中一个DLL的某种问题。任何人都可以推荐一些好的工具来帮助找出启动问题的原因吗?

4 个答案:

答案 0 :(得分:5)

我不是肯定这是你想要的,但Dependency Walker对我这样的情况非常有帮助。

答案 1 :(得分:1)

您是否在Visual Studio调试窗口中没有输出任何内容?例如,当我运行调试版本时,我得到一个像这样加载的DLL列表:

'Blah.exe': Loaded 'C:\StarTeam\Blah\Development\Blah\CODE\Debug\Blah.exe', Symbols loaded.
'Blah.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', No symbols loaded.
'Blah.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', No symbols loaded.
'Blah.exe': Loaded 'C:\WINDOWS\system32\ws2_32.dll', No symbols loaded.
'Blah.exe': Loaded 'C:\WINDOWS\system32\msvcrt.dll', No symbols loaded.
'Blah.exe': Loaded 'C:\WINDOWS\system32\ws2help.dll', No symbols loaded.

启用/显示窗口的快捷方式是VS2005中的Alt + 2。我认为它在VS2008中是一样的。确保窗口顶部显示其输出“Debug”消息。然后右键单击以确保选中所有输出,这样您就不会错过任何内容。

答案 2 :(得分:0)

您可以尝试在Debug-> Exceptions中启用break-on-exceptions。它可能会抛出一个可捕获的异常,如果是这样,如果你单击Debug-> Exceptions窗口中的所有复选框,调试器将中断异常,而不是让程序像那样死掉。

我怀疑Dependency Walker会有所帮助,它会告诉你正在加载哪些DLL,但Visual Studio输出窗口也是如此,最后打印的DLL是唯一值得考虑的DLL。

答案 3 :(得分:0)

Visual Studio 2005中的输出窗口将显示在调试器中启动时正在加载的dll。我相信VS 2008会做同样的事情。如果没有显示dll的加载,右键单击输出窗口,您会看到一个菜单,可以让您启用“模块加载消息”。

最后一个dll加载消息应该是你的罪魁祸首。然后你可以在它的DllMain中设置一个断点,并试着找出它失败的原因。