使用Visual Studio 2010时遇到一个奇怪的问题。
我正在运行一个DLL,它是从Microsoft IIS
进程中的w3p.exe
加载的。当我在另一台机器上启动远程调试器并在那里连接我的本地机器时,一切都很好,我可以调试。
问题是我在本地运行它。我知道DLL已加载(因为日志文件),我可以将调试器附加到进程。但是当我尝试Break all
时,我收到错误说
无法中断执行。此过程当前未执行您选择调试的代码类型。
项目设置肯定指向刚编译正在运行的DLL的项目,因此我不太了解此错误消息。
当我设置断点时,没有任何反应。虽然附加了调试器,因为当我停止IIS
时,我收到一条错误消息,告诉我需要首先停止调试器。
我使用故意应用程序错误fopen(NULL, NULL)
,这将允许我在调试版本中附加调试器。但这是相当不错的,因为在实际开始调试之前我必须手动清除调用堆栈。使用__debugbreak()
没有帮助,所以我必须使用这种笨拙的解决方法。
那么有人可以告诉我为什么这种方法可以远程工作,但不能在本地工作吗?
答案 0 :(得分:2)
所以我终于找到了解决问题的方法。
打开附加对话框时,会出现一个Attach to: Managed...
选项,旁边有一个Select
按钮。默认情况下,此设置为Managed (v4.0)
。现在我添加了Native code
,这解决了我的问题。我现在也可以在当地附上。
我肯定不明白为什么它在远程机器上工作,因为代码完全相同,所以不应该有这样的差异。