使用Visual Studio 2008,这取决于我的心情开始调试,我可以附上处理和命中断点这样,不然我就放System.Diagnostics.Debugger.Break()在代码中的相应位置,并开始调试时它在那一点上破了.
我发现后者有时是必要的!
不是说F5- >在调试模式下运行一秒钟......
System.Diagnostics.Debugger.Break();
Run Code Online (Sandbox Code Playgroud)
问题:
问)我很好奇每个选项之间的细微差别?
问)使用每种产品有什么好处和缺点?
我会开始吧......
Debugger.Break()缺点=忘记Debugger.Break()并将它们留在那里!
Debugger.Break()的好处=开始在你想要的地方准确调试,而不会遇到可能仍然存在于代码中的其他不必要的断点,如果附加到进程,它将会被命中.
先发制人
如果我使用的是Debugger.Break(),我只是先发制人,这无疑会说出来.我不理解正确的调试方式.
我只想尝试在这里开始对话,因为我认为根据具体情况有不同的调试方式.
BFr*_*ree 12
我曾经在一个基于插件的应用程序上工作,它在启动时做了很多事情.它会在许多其他事情中进行插件发现.我无法直接从Visual Studio运行它,因此F5不是一个选项,但也不能选择Attach to Debugger,因为很多时候我需要调试启动时发生的所有事情.我永远无法及时捕捉它与附加到进程.因此,我只是将Debugger.Break()设置在我想要的位置.
另一个例子; 我正在为PowerShell编写一个cmdlet.那些你不在Visual Studio中运行的; 您从PowerShell命令行运行它们.它们通常是快速的小应用程序,并且你无法及时捕获它们与Attach to Process.
除了BFree的回答之外,我还发现Break在处理设计不佳的传统产品时偶尔会有用.这种特殊产品有吞咽或忽视异常的坏习惯,其记录机制(事实上,从未做过)没有正常工作.它经常违反许多需要客户"幸运"才能在运行时工作的良好实践.我开始添加一个快速的代码:
if(System.Diagnostics.Debugger.IsAttached)
{
System.Diagnostics.Debugger.Break();
}
Run Code Online (Sandbox Code Playgroud)
到我专注于调试的具体位置.这使我更容易在不破坏客户运行代码的情况下查看正在发生的事情和违反的情况.(我梦寐以求的是,这也有希望在我那些不那么有头脑的同事身上找到了.)
是的,我知道这不是一个特别好的做法,我永远不会在新的代码中做到这一点.但请相信我,如果你正在通过该代码库,你已经做了类似的事情.;)