如何跟踪使用的DLL(这是所谓的DLL地狱?)

这应该是一个简单的问题,但我确实无法理解。 Windows 7的环境是Visual Studio 2008,该机器还安装了vs2010,vs2012。 (我必须安装几个VS,因为各个项目使用不同的版本)

我有一个简单的应用程序使用一些3 – DLL的。 1)。 当应用程序从Vs启动时,它是可以的。

2)。 当我复制DLL来执行文件并从资源pipe理器启动时,应用程序崩溃在C ++库

例如:程序:xxx.exe文件:c:\ program files \ microsoft visual studio 9.0 \ vc \ include \ vector行:779expression式:向量下标超出范围

3)。 我打开了一个命令行,在PATH环境variables之前添加了“Visual Studio 9.0”和“Visual Studio 9.0 \ vc \ bin”,并启动了应用程序,同时也崩溃了。

我已经附加到手动启动/崩溃的过程,并将其与模块和PATH环境的Vs IDE lanuched过程进行比较,它似乎一样….我很沮丧。

任何build议? 先谢谢了。


我刚才find了原因。 在Visual Studio中,有一个“debugging|” 工作目录“设置,默认为项目目录。 虽然我复制了所有的DLL,但我错过了一些configuration文件。 这是应用程序逻辑错误。

“向量下标超出范围”问题似乎是从您的代码更多,而不是DLL依赖性问题。 但是,请确保引用正确版本的DLL – 调试/发布。

使用SysInternals的进程监视器跟踪,哪个DLL被加载。

我会建议使用Dependency Walker来调试依赖性问题。

您可以在静态模式或动态模式(从配置文件菜单)中使用它来准确诊断加载程序在运行时正在执行的操作。 后一种模式听起来像你在找什么。