首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.NET源代码可以硬编码调试断点吗?

.NET源代码可以硬编码调试断点吗?
EN

Stack Overflow用户
提问于 2008-12-11 23:55:01
回答 7查看 29.5K关注 0票数 76

我正在寻找一种在.NET (2.0,特别是C# )中让源代码触发调试中断的方法,就像在那个点上设置了断点一样,而不必记住在调试器中设置特定的断点,并且不会干扰生产运行时。

我们的代码需要在生产环境中接受异常,这样我们才不会中断链接到我们的客户端应用程序,但我正在尝试设置它,以便当它碰巧在调试器中运行时,将弹出此类错误进行分析,否则将安全地忽略这些错误。

我使用Debug.Assert(false)的尝试并不理想,我假设Debug.Fail()也会以同样的方式工作。从理论上讲,它在生产中应该没有任何影响,而且在调试时它确实成功地停止了,但是根据设计,如果你想忽略这个错误(就我所知),就没有办法继续执行,就像你可以用实际的断点,并且像在生产中我们吞下错误一样。它显然也破坏了变量状态的计算,因为调试器实际上在本机系统代码中停止了,而不是在我们的代码中,所以它的调试帮助是有限的。(也许我错过了一些返回事物的方法来查看变量,等等它发生的地方。?)

我希望有像Debug.Break()这样的东西,但它似乎并不存在(除非可能在更高版本的.NET中存在?),而且似乎也没有其他Debug方法可用。

更新:虽然ctacke的答案是我所寻找的最匹配的,但从那时起,我还发现了Debug.Assert ()的一个技巧--当在调试器中运行时--暂停调试器,转到Debug.Assert调用挂起的代码(突出显示为绿色,因为它在框架代码中已关闭)并点击逐步退出(shift-F11),然后在assert对话框中点击Ignore。这将使调试器在断言返回时暂停(并且能够继续执行,就好像它没有发生一样,因为它被忽略了)。可能还有其他方法可以做同样的事情(点击重试可以更直接地做到这一点吗?),但这种方法很直观。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2008-12-12 00:02:20

你可能想要这样的东西:

代码语言:javascript
复制
if(System.Diagnostics.Debugger.IsAttached)
  System.Diagnostics.Debugger.Break();

当然,这仍然会在发布版本中编译。如果您希望它的行为更像Debug对象,其中代码根本不存在于发布版本中,那么您可以这样做:

代码语言:javascript
复制
    // Conditional("Debug") means that calls to DebugBreak will only be
    // compiled when Debug is defined. DebugBreak will still be compiled
    // even in release mode, but the #if eliminates the code within it.
    // DebuggerHidden is so that, when the break happens, the call stack
    // is at the caller rather than inside of DebugBreak.
    [DebuggerHidden]
    [Conditional("DEBUG")] 
    void DebugBreak()
    {
        if(System.Diagnostics.Debugger.IsAttached)
            System.Diagnostics.Debugger.Break();
    }

然后在您的代码中添加对它的调用。

票数 137
EN

Stack Overflow用户

发布于 2008-12-11 23:58:58

有一次我遇到了这样的情况

代码语言:javascript
复制
System.Diagnostics.Debugger.Break();

但这确实做到了

代码语言:javascript
复制
System.Diagnostics.Debugger.Launch();
票数 13
EN

Stack Overflow用户

发布于 2008-12-11 23:56:42

System.Diagnostics.Debugger.Break

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/361468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档