때때로 Visual Studio 디버거가 잘못된 현재 명령을 표시합니다. 가장 단순한 이유는 다음과 같습니다.디버거에 잘못된 명령이 표시됩니다.
- 오래된 .pdb 파일. 이 파일에는 이진 파일의 어느 오프셋이 코드 줄에 해당하는지에 대한 정보가 들어 있습니다. 이러한 파일이 오래된 경우 분명히 디버거는 잘못된 줄을 표시합니다.
- 디버그 대신 릴리스 모드로 컴파일 된 프로그램. 릴리스 모드는 일반적으로 옵티마이 저가 코드를 더 빠르게 (또는 더 작게) 수정할 수 있도록 최적화를 켭니다. 이 경우 바이너리 파일은 더 이상 소스 코드에 해당하지 않으므로 디버거는 실제 실행 된 행을 표시 할 수 없습니다.
하지만 제 경우가 다릅니다. 여기에 소스 코드 (C#)가 있습니다 :
if (match.Groups.Count != 4)
throw new InvalidOperationException("Internal error: Invalid regular expression!");
MyEnum myEnum;
try
{
// (...)
나는 소스를 디버깅했습니다. 디버거는 조건문에서 멈추어 진 결과, match.Groups.Count
은 실제로 4와 같습니다. 분명히 throw 문은 건너 뛰었어야했지만 놀랍게도 그렇지 않았습니다. 그러나 throw
문을 "실행"한 후 디버거는 다음 유효한 문으로 이동하여 예상 한대로 계속 실행합니다.
무슨 일이 일어 났습니까?
FYI : 자신의 질문에 답변 할 때 디스플레이 하단에 "자신의 질문에 답하십시오"확인란이 있습니다. 내 생각에 사람들이 끼어 들지 않고 대답하는 것을 막을 수 있다고 생각합니다. –
그래, 잊어 버렸어 :) 고마워. – Spook