在visual studio中,当您在托管语言中没有属性更改时,如何破坏调试器(如C#)

Moh*_*oth 4 c# debugging winforms .net-4.5

我有一个奇怪的情况,其中的东西是将主MDI表单的TopMost属性设置为true.经过多次试验和错误,我们非常肯定这必须来自第三方库,但它不在我们期望的任何地方.

如果我们可以在设置此属性时将应用程序设置为在调试器中中断,那么修复此问题非常容易.但是,这个属性是由WinForms库定义的,所以我们不能只在那里放置一个断点.

对于你正在使用库而你没有源代码的情况是非常宝贵的,但我担心这个问题没有解决办法,因为托管语言不支持数据断点(据我所知) .

那么,在C#中,当你无法在setter中设置断点时,你知道如何在属性发生变化时中断吗?这可以很容易地解决许多边缘案例问题,其中的事情因您无法预料的原因而发生变化.

Kev*_*sse 8

可以在您不拥有的代码上设置断点.既然TopMost是一个属性,你所要做的就是在setter上设置一个断点.

只需打开Visual Studio中的"断点"面板(Debug - > Windows - > Breakpoints),单击"New - > Function Breakpoint",然后键入:

System.Windows.Forms.Form.set_TopMost

运行您的应用程序(确保加载符号)和利润.

请注意,您还需要确保禁用"仅我的代码".进入工具 - >选项 - >调试 - >常规,取消选中"启用我的代码".