문제

읽는 것 외에 GetFileName() 파일 및 라인에 대한 읽기 GetFileLineNumber() 스택 프레임의

new StackTrace(exception).GetFrame(x)

예외를 일으킨 실제 코드 줄 (문자열)을 얻는 방법이 있습니까?

감사

도움이 되었습니까?

해결책

Post Moretem 디버깅은 어렵지만 불가능하지는 않습니다. 사용할 수있는 도구가 있습니다 (여기 그리고 여기 예를 들어)뿐만 아니라 기법.

다른 팁

나는 그렇게 생각하지 않습니다. 코드는 컴파일되므로 더 이상 사용할 수 없습니다. 그러나 당신이 있다면 또한 소스 코드를 사용할 수 있으면 몇 가지 해결 방법이있을 수 있습니다.

아니, 그게 내가 아는 한 유일한 옵션입니다. 예외를 일으킨 원래 코드 줄을 얻으려면 소스를 사용할 수 있도록해야합니다. 그 StackFrame 이미 Debug 기호를 통해 (대부분의 경우 PDB 파일을 통해) 줄 번호를 얻을 수 있습니다.

제안한 방법에 특별한 문제가 있습니까?

라인 정보가 DLL 파일에 저장되지 않기 때문에 신뢰할 수있는 방법은 없습니다. IL 블록을 소스 코드 라인에 매핑하는 정보는 PDB 파일 내에 저장됩니다. 예외를 위해 라인 정보를 얻으려면 PDB에 액세스해야합니다.

PDB를 사용할 수있는 경우 StackFrame 클래스에 적절한 isymunmanagedMethod 클래스를 얻을 수있는 충분한 정보가 있습니다. 주로 메소드 토큰과 메소드에 대한 현재 오프셋 만 있으면됩니다. 이것은 PDB의 내부 구조를 이해해야하며 어디에서나 문서화되어 있는지 확실하지 않습니다.

PDB API : http://msdn.microsoft.com/en-us/library/ms233503.aspx

컴파일되므로 런타임에 IL 만 있으면됩니다. 기껏해야 IL을 가져 와서 반사판과 마찬가지로 C#으로 다시 소환 할 수 있습니다.

당신은 a를 사용하여 라인을 얻을 수 있습니다 try catch 차단하다:

catch(Exception exception) {
    //exception.StackTrace at the first line has the line you are looking for
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top