2016-12-15 8 views
1

내 조건부 중단 점은 때때로 잘 작동하고, 때로는 다음과 같은 오류와 함께 실패합니다System.Math.Abs ​​()는 네이티브 메서드 인 System.AppDomain.GetId()를 호출합니까?

The condition for a breakpoint failed to execute. The condition was 'Math.Abs(-4.36767421599683 -x) < 1e-5'. The error returned was 'Evaluation of method System.Math.Abs() calls into native method System.AppDomain.GetId(). Evaluation of native methods in this context is not supported.'.

  1. 어떻게 그것은 단지 시간의 일부를 작동합니까? 조건부 중단 점 코드가 실행할 때마다 동일하지 않은 런타임 트릭이 발생합니까?
  2. Abs() 코드의 모든 버전이 AppDomain.GetId()를 호출하는 이유는 무엇입니까? 순수 연산입니다.
  3. .NET 참조 소스는 방법 extern public static double Abs(double)을 보여줍니다. 어쨌든 항상이라는 뜻입니까? 어떻게 작동 할 수 있습니까?
+0

나는 그 오류 메시지를 너무 심각하게 생각하지 않을 것이다. VS 버전은 중요합니다. 최신 디버그 엔진 재 작성은 상당히 버그가 있습니다. 그들이 알기 론, 그들은 낡은 것을 그대로 두었습니다. 도구> 옵션> 디버깅> 일반을 클릭하십시오. –

답변

1

먼저 디버거 평가에서 네이티브 메소드를 호출 할 수 없다는 것을 알아야합니다.

How does it only work some of the time? Is there runtime trickery happening where the conditional breakpoint code isn't the same each time I run it?

예는 이상하다 (잘 real func eval 여부를하지만, 심지어는하지 실제 FUNC의 평가는 우리가 그 완전히 사실이 아니다를 볼 수 있지만 대기 할 때 경우의는 ... 따라 다릅니다)하지만이 될 수 있습니다. 디버거 평가 기는 실제로 앱 도메인 ID를 얻을 수 있지만 때로는 오류가 발생하여 예외가 발생합니다.

If there was, why on earth would any version of the code for Abs() call AppDomain.GetId() - it's purely arithmetic surely?

저는이 호출이 단지 Math.Abs과 관련이 없다고 확신합니다.

The .NET reference source shows a method extern public static double Abs(double) . Doesn't that mean it's always native anyway? How could it ever work?

일부 원시 메소드의 경우 디버거 평 Math.Abs이 그 중 하나입니다.


Visual Studio에서 재생했지만 성공하지 못했습니다. (VS 2017)

Watch Window (접미사가 nse 인)에서 동일한 표현식을 평가하고 예외가 계속 발생하는지 알려주십시오. 그냥

당신에게 네이티브 코드를 호출하는 방법 평가 시도의 예를 보여 : (오류 메시지를 읽기)

enter image description here

한 가지 더, 비주얼 스튜디오의 다른 버전을 평가하기 위해 시도 .