如何跟踪使用过的DLL(是不是所谓的DLL地狱?)
How to trace used DLL (is it so-called DLL hell ?)
这应该是一个简单的问题,但我确实被绊倒了。环境是Windows 7上的Visual Studio 2008,机器上还安装了vs2010, vs2012。(我必须安装几个VS,因为不同的项目使用不同的版本)
我有一个简单的应用程序,使用了一些第三方dll。1).当应用程序从Vs启动时,它是OK的
2)。当我复制dll来执行文件并从资源管理器中启动它时,应用程序在c++库上崩溃了
类似:计划:xxx.exe文件目录:c:program filesmicrosoft visual studio 9.0vcincludevector线:779表达式:vector下标超出范围
3)。我打开命令行,在PATH环境变量前添加"Visual Studio 9.0"answers"Visual Studio 9.0vcbin",然后启动应用程序,它也崩溃了。
我已经附加到手动启动/崩溃的进程,并将其与Vs IDE启动的模块和PATH环境的进程进行比较,似乎是一样的....我很沮丧。
任何建议吗?提前感谢。
我刚才才发现原因。在Visual Studio中,有一个"调试|工作目录"设置,默认为项目目录。虽然我复制了所有的dll,但是我漏掉了一些配置文件。应用逻辑错误
使用SysInternals的进程监视器来跟踪,哪个DLL被加载了
我建议使用Dependency Walker来调试依赖项问题。
您可以在静态模式或动态模式(从Profile菜单)下使用它来准确诊断加载器在运行时正在做什么。后一种模式听起来就是您要找的。
'向量下标超出范围'问题似乎更多来自您的代码,而不是DLL依赖关系问题。但是,请确保引用了正确的dll版本- Debug/Release。
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 在枚举类型上使用std::max是不是一种糟糕的做法
- std::元组大小,是不是错过了优化?
- 为什么我的程序寻找共享资源.dll而不是Commons.lib
- 拥有相同方法的静态和非静态版本是不是设计不好
- 他是不是很贪婪
- SDL2:移动所有东西而不是使用视图端口是不是很糟糕
- OOP-我是不是把事情复杂化了
- 在DLL中分配内存并将其指针提供给客户端应用程序,这是不是一种糟糕的做法
- 在C++代码中使用C风格的注释是不是一种糟糕的做法
- 如何将库构建为.dll而不是.lib
- 输出DLL而不是使用CMAKE/MINGW输出
- 如果我在C++中使用堆,我是不是做错了什么
- 这个简单但有用的模式是不是太简单了,不可能成为一个真正的模式
- 在C++中,通过引用传递常量布尔值是不是不好的
- 在main.cpp中而不是在头文件中定义函数是不是一种糟糕的做法
- VS2012正在查找64位dll而不是32位
- 如何跟踪使用过的DLL(是不是所谓的DLL地狱?)
- VC C++DLL文件不是在VBA使用的预期文件夹中生成的