我的条件断点有时工作正常,有时会失败,并出现以下错误:
断点的条件无法执行。条件是'Math.Abs(-4.36767421599683 -x)< 1E-5' 。返回的错误是'评估方法System.Math.Abs()调用本机方法System.AppDomain.GetId()。不支持在此上下文中评估本机方法。'。
extern public static double Abs(double)
。这是不是意味着始终原生?怎么可能有用?答案 0 :(得分:1)
首先,您需要知道调试器评估不能调用本机方法。 (如果不是real func eval,它依赖它,但即使它不是真正的功能,我们也会看到它不完全正确但等待......)
它如何只在某些时候起作用?每次运行时条件断点代码都不相同,是否会发生运行时技巧?
是的,这很奇怪,但也可能。调试器评估程序实际上能够获取应用程序域ID,但有时会发生一些错误,然后您将获得该异常。
如果有的话,为什么Abs()的任何版本的代码都会调用AppDomain.GetId() - 它绝对是纯粹算术的?
我非常确定这个电话不仅与Math.Abs
有关。
.NET参考源显示方法
extern public static double Abs(double)
。这是不是意味着它总是原生的?怎么会有用?
因为对于某些本机方法,调试器评估程序具有以特殊方式处理它的钩子。 Math.Abs
就是其中之一。
我尝试在Visual Studio中重现它,但没有成功。 (VS 2017)
尝试在Watch Window中评估相同的表达式(后缀为nse)并告诉我你是否仍然得到异常。
只是为了向您展示尝试评估调用本机代码的方法的示例:(阅读错误消息)
还有一件事,尝试在其他版本的Visual Studio中进行评估。