【发布时间】:2015-12-16 12:49:17
【问题描述】:
我在使用 Visual Studio 2010 时遇到了一个奇怪的问题。
我正在运行一个 DLL,它是在 Microsoft 的进程 w3p.exe 中从 IIS 加载的。当我在另一台机器上启动远程调试器并将我的本地机器连接到那里时,一切都很好,我可以调试了。
问题是当我在本地运行它时。我知道 DLL 已加载(因为日志文件),我可以将调试器附加到进程。但是当我尝试Break all 时,我收到一条错误消息
无法中断执行。此进程当前未执行您选择调试的代码类型。
项目设置肯定是指向刚刚编译运行DLL的项目,所以我不太明白这个错误信息。
另外,当我设置断点时,什么也没有发生。调试器已附加,因为当我停止 IIS 时,我收到一条错误消息,告诉我需要先停止调试器。
我正在使用一个故意的应用程序错误fopen(NULL, NULL),这将允许我在调试版本中附加一个调试器。但这很麻烦,因为我必须手动清除调用堆栈才能真正开始调试。使用__debugbreak() 没有帮助,所以我必须使用这个笨拙的解决方法。
那么谁能告诉我为什么这在远程工作,而不是在本地工作?
【问题讨论】:
-
检查您的 dll 是否出现在
Debug -> Windows -> Modules窗口中并从预期位置加载。如果成功,此窗口还会显示调试器是否加载了模块和 pdb 位置的调试符号。 -
此 DLL 没有其他位置,因此必须从那里加载或根本不加载。正如我所说,我可以在日志中验证 DLL 是否已加载。
-
@frymode,现在找到了解决方案。
标签: c++ visual-studio debugging