如何调试静态依赖加载问题?

时间:2011-04-27 05:04:37

标签: c++ visual-c++ windbg static-linking

如何调试Visual C ++ 2010 SP1应用程序无法完全加载其依赖项并过早退出而不显示其UI的场景?

如果您认为它们是相关的,我对Fusion Logs,依赖性walker和远程调试器的指南很感兴趣。是否可以使用WinDbg轻松验证?那么Process Explorer呢?

是否可以在连接了远程调试器的远程计算机上启动进程?

是否可以验证是否安装了正确的Visual C ++ 2010 SP1运行时?

一个限制:应用程序在安装了Visual Studio的开发人员的框中运行良好。只能在干净的目标机器上观察到问题。这意味着安装工具链时问题可能会消失。

3 个答案:

答案 0 :(得分:4)

我始终通过DependencyWalker检查dll依赖问题,然后使用the Global Flags Editor gFlags.exe,在“图片文件”标签中设置您的程序并选中“显示加载程序快照

当您的程序运行时,WinDbg.exe应该从dependencyWalker和您的源代码(如果您使用LoadLibrary)的帮助下输出大量的DLL加载消息,您应该能够找出出错的地方。 / p>

答案 1 :(得分:2)

查看/ VERBOSE开关是否可以帮助您了解链接器在构建和开始调试代码时尝试加载和运行的依赖项。

如果使用/ VERBOSE开关,基本上链接器会将有关链接器加载的库的消息写入输出窗口,这也可以在构建日志中找到,以便您可以查看它以供参考。这样,如果加载特定依赖项 可能是 时出错,这可能对您有所帮助。

当我遇到链接错误并且知道哪个依赖项导致了我的代码中的问题时,我已经尝试过/ VERBOSE。

请参阅http://msdn.microsoft.com/en-us/library/wdsk6as6(v=vs.80).aspx以检查这是否对您有帮助。

答案 2 :(得分:1)

是否可以在连接了远程调试器的远程计算机上启动进程?

当然可以。例如,在Visual Studio 2008中,右键单击您的项目 - >属性 - >配置属性 - >调试,在“要启动的调试器”下拉列表中选择“远程Windows调试器”。然后在远程计算机上键入EXE的完整路径,并根据参数输入。

在此之前,您需要首先在远程计算机上运行远程调试监视器。将\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ Remote Debugger \ x86(或其他平台)复制到远程计算机,然后运行msvsmon.exe。

通常,如果您的应用程序由于缺少某些静态依赖项而退出,您可以使用dependency walker来检查缺少哪一个。