2

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

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

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

编辑:澄清一下:在运行时,同一段最终用户代码将由托管可执行文件多次运行,其中一些断点应该被尊重,而其他时候它们不应该被尊重。要求用户为此功能修改他们的代码或要求他们设置条件断点是不合适的。

4

2 回答 2

2

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

如何通过 DTE 启用/禁用断点

如何通过 DTE 附加调试器

于 2010-01-07T21:36:27.693 回答
0

您可以使用System.Diagnostics.Debugger.Break()而不是设置断点。只需将方法调用放在任何需要的块中。

于 2010-01-06T22:03:22.203 回答