无法中断执行.此进程当前未执行该类型的代码

Unable to break execution. This process is not currently executing the type of code

本文关键字:执行 类型 代码 中断 进程      更新时间:2023-10-16

我在使用Visual Studio 2010时遇到了一个奇怪的问题。

我正在运行一个DLL,它是在Microsoft的进程w3p.exe中从IIS加载的。当我在另一台机器上启动远程调试器并将本地机器连接到那里时,一切都很好,我可以调试了。问题是当我在本地运行它时。我知道DLL已经加载(因为日志文件),并且我可以将调试器附加到进程。但当我尝试Break all时,我收到一个错误,说

无法中断执行。此进程当前未执行您选择要调试的代码类型。

项目设置肯定指向刚刚编译运行DLL的项目,所以我真的不理解这个错误消息。

此外,当我设置断点时,不会发生任何事情。调试器是附加的,因为当我停止IIS时,我会收到一条错误消息,告诉我需要首先停止调试器。

我使用了一个故意的应用程序错误fopen(NULL, NULL),这将允许我在调试构建中附加一个调试器。但这相当麻烦,因为在真正开始调试之前,我必须手动清除调用堆栈。使用__debugbreak()没有帮助,所以我不得不使用这个笨拙的变通方法。

有人能告诉我为什么这是远程工作,而不是本地工作吗?

所以我终于找到了解决问题的方法。

打开附加对话框时,有一个选项Attach to: Managed...,旁边有一个Select按钮。默认情况下,此选项设置为Managed (v4.0)。现在我添加了Native code,这解决了我的问题。我现在也可以在本地附加。

我当然不明白为什么这在远程机器上有效,因为代码完全相同,所以不应该有这样的区别。