VSX:以编程方式在运行时禁用断点

时间:2010-01-06 21:52:55

标签: c# .net visual-studio-2008 debugging vsx

如何在运行时启用或禁用断点?我正在编写一个测试工作台应用程序,可以运行其他.net代码来调试插件。工作台应用程序本身不是可调试的(DebuggableNonUserCodeAttribute),但它调用的用户代码应该是。但是,在运行时的某些情况下,不应该遵守用户代码断点。

我可以想象实现这一目标的各种方法,许多可能是不可能的:

1)以编程方式连接和分离调试器
2)以编程方式启用和禁用所有断点(最好本地化为程序集或类)
3)在运行时使用DebuggableNonUserCodeAttribute动态修饰和解开方法 4)以某种方式将线程的整个代码分支标记为选定的堆栈帧,作为调试器的“不可破解”。 DebuggableNonUserCodeAttribute似乎只在方法或类中工作,但不影响下游代码的可调试性。

编辑:澄清:在运行时期间,托管可执行文件将多次运行相同的最终用户代码,其中一些应该遵守断点,而其他时间则不应该。要求用户修改此功能的代码或者要求他们设置条件断点是不合适的。

2 个答案:

答案 0 :(得分:2)

您可以通过DTE自动化对象模型的调试器部分执行#1和#2。

How to enable/disable Breakpoints via DTE

How to attach the debugger via DTE

答案 1 :(得分:0)

您可以使用System.Diagnostics.Debugger.Break()代替设置断点。如果需要块,只需将方法调用放在内部即可。