【问题标题】:Unable to break execution. This process is not currently executing the type of code无法中断执行。此进程当前未执行该类型的代码
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 你拯救了我的灵魂!
猜你喜欢
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 2013-02-18
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多