Oli*_*Oli 7 .net c# clr visual-studio
我的条件断点有时工作正常,有时会失败,出现以下错误:
断点的条件无法执行.条件是'Math.Abs(-4.36767421599683 -x)<1e-5'.返回的错误是'评估方法System.Math.Abs()调用本机方法System.AppDomain.GetId().不支持在此上下文中评估本机方法.'.
extern public static double Abs(double).这是不是意味着它总是原生的?它怎么可能工作?首先,您需要知道调试器评估不能调用本机方法。(好吧,这取决于它是否是真正的 func eval,但即使它不是真正的 func eval,我们也会看到它并不完全正确,但等等......)
怎么它只在某些时候起作用?是否存在运行时欺骗,每次运行时条件断点代码都不相同?
是的,这很奇怪,但也有可能。调试器评估器实际上能够获取应用程序域 ID,但有时会发生一些错误,然后您会得到该异常。
如果有的话,为什么 Abs() 代码的任何版本都会调用 AppDomain.GetId() - 这肯定是纯粹的算术?
我很确定这个电话不仅仅与Math.Abs.
.NET 参考源显示了一种方法
extern public static double Abs(double)。这是否意味着它始终是本地的?它怎么可能起作用呢?
因为对于某些本机方法,调试器评估器具有以特殊方式处理它的钩子。Math.Abs是其中之一。
我尝试在 Visual Studio 中重现它,但没有成功。(对比 2017 年)
尝试在监视窗口(后缀为 ,nse)中计算相同的表达式,并告诉我是否仍然出现异常。
只是为了向您展示尝试评估调用本机代码的方法的示例:(阅读错误消息)
一件事,尝试在其他版本的 Visual Studio 中评估它。
| 归档时间: |
|
| 查看次数: |
1845 次 |
| 最近记录: |