【问题标题】:How to resolve phantom breakpoint?如何解决幻像断点?
【发布时间】:2013-06-04 10:57:15
【问题描述】:

当我启动调试会话时,程序执行会在似乎是断点的行处停止(黄色背景色)。我必须按 F5 才能继续,程序正常进行。

我将其称为幻像断点,因为似乎没有设置断点,即使执行在循环内停止,我只需按一次 F5 即可继续。

我尝试在虚拟位置设置断点,并删除所有断点但无济于事。

我能找到的唯一其他类似问题是 Java 和 MS-Access,解决方案是反编译应用程序。

虽然在开发过程中这很烦人,但我咬紧牙关,直到应用程序安装在 Citrix 服务器上,并显示错误消息框,提示遇到断点。

事后,我刚刚重新构建了安装程序,运行应用程序后,出现了严重错误。在调试模式下,消息是“myapp.exe 已触发断点:”。我无法解释为什么它在 Citrix 服务器上完全有效)。

对于如何解决此问题的任何建议,我当然不胜感激。

TIA

【问题讨论】:

  • 在调试期间发生这种情况时,您是否在“输出”窗口中看到任何消息?
  • 听起来您遇到了运行时问题,如果输出窗口中没有任何内容,我会尝试运行分析器。
  • “输出”窗口中不显示任何内容。请详细说明和/或指出有关使用分析器的信息。

标签: vb.net winforms debugging


【解决方案1】:

您正在运行其他人的代码,并且该代码具有编译到程序中的显式调试器中断指令。例如,您可以通过在托管程序中编写 Debugger.Break() 来做到这一点。它也可能存在于非托管代码中,__debugbreak() 内部函数或 DebugBreak() winapi 函数执行此操作。可能是一个简单的疏忽,也可能是故意将其留在代码中以警告问题。

找到执行此操作的程序员的一种方法是使用调试器。项目+属性,调试选项卡,勾选“启用非托管代码调试”选项。然后工具+选项,调试,常规,取消勾选“仅启用我的代码”选项。

运行程序并重现条件。现在使用 Debug + Windows + Call Stack 并查看列表的最顶部。如有必要,向上滚动。它很可能是灰色的,表明这不是你的代码,它不会是。您将在此处看到 DLL 的名称。致电编写该 DLL 的公司或程序员并寻求建议。

【讨论】:

  • 感谢您提供如此详细的答案。我很久以前遇到过类似的事情,无法解决。
  • 感谢您的启发性回答,但我没有提到我使用的是 VS 2010 Express,它不包含“启用托管代码”选项。您提到了查明有问题的 dll 的其他方法。如果您能详细说明,我将不胜感激。
  • 我没有提到。当然,很难支持不使用正确工具的程序员。祝你好运。
猜你喜欢
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多