문제

내가 사용하 Windbg 을 부하 덤프터 관리 code(C#,를 콘솔 프로그램 구축을 위한 모든 CPU),와 충돌을 덤프를 만들에 x64 플랫폼입니다.나는 디버깅에 x64 플랫폼입니다.

내가 사용하여 다음과 같은 명령을 로드하는 개인의 상징 내 응용 프로그램이 있습니다.여기에는 어떤 명령을 내가 사용하에 Windbg.

(set symbol path and copy FooService.pdb pdb file to local symbol path D:\Debug)

0:016> .reload /f
.*** WARNING: Unable to verify checksum for FooService.exe
DBGHELP: FooService.pdb- private symbols & lines 
         D:\Debug\FooService.pdb

0:016> lm
start             end                 module name
00000000`00400000 00000000`0041c000   FooService C (private pdb symbols)  D:\Debug\FooService.pdb

나의 혼란 때,다음 명령을 사용하여,아무선 번호 정보가에서 보여 스택을 추적합니다.어떤 아이디어가 무엇이 잘못되었나요?필요합 source path?

0:016> ~6 e!clrstack

편집 1:제가 만난 몇몇 사용하여 문제를!pe 및!U 을 찾 스택 추적 예외가 발생합니다.

여기에 나 debug 과정입니다.처음에는 내가 사용하는!pe 를 인쇄 스택 추적 예외에 대한 개체를 사용할 때!U 을 diassemble 코드입니다.문제 내가 찾는 것은!U diassemble 모든 함수 코드의 FooService.ProcessOrders(),나를 찾고 싶어 정확한 장소에서 기능 FooService.ProcessOrders 충돌이 발생합니다.또한 찾을 수 있 diassembled 석 IL 만 코드를 포함 함수 호출을 내가 만든(을 위한 비 함수 호출 C#코드,예를 들어 a=*2,단지 어셈블리의 언어는 다음과 같),지 정확히 IL 매핑을 각각 선 C#의 코드(1)는 올바른 예상되는 동작입니까?(2)해결책은 무엇인 또는 더 제안을 찾기 위해 정확한 실패 C#코드 내에서 분석 게시까요?

!pe 0000064280155325

StackTrace (generated):
    SP               IP               Function

    000000001A56DA70 00000642B74E3B7A System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(System.Data.Common.DbAsyncResult, System.String, Boolean)
    000000001A56DB10 00000642B74E3FCC System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
    000000001A56DB90 0000064280155325 FooService.ProcessOrders()
    000000001A56F3E0 0000064280153A21 FooService.RountineJob()

!U 0000064280155325 

감사,사전에 조지

도움이 되었습니까?

해결책

WinDbg/SOS 지 않도 라인 번호의 출력 !clrstack.그래서 한 lm 알려가 있는 개인 pdb 기호에 대한 당신의 자신의 어셈블리는 당신이 설정이 올바른 것입니다.Unfortuntately 현재 버전의 WinDbg/SOS 지원하지 않 소스 수준 디버깅을 동일한으로 확장을 위해 원시 코드입니다.

편집:에 관한 예외가 있습니다.을 수행할 때 !pe,그것은 말할 것입니다 호출 스택뿐만 아니라 오프셋 관련 방법이 있습니다.는 경우에 당신은 주소에 IP 열의 !pe 출력 및 수행 !U 에는,당신은 당신이 볼 JITTED 코드에 대한 관련 방법입니다.IP 열 것이 마지막 주소는 코드의 생성된 예외(그래서 당신은 약간의 계산을 찾아 올바른 명령).

분해 출력은 주석이다.순이 호출되지 않도록 열심히도 이에 대해 IL 또는 소스 코드입니다.는 데 도움이 됩 정확하게 확인을 던져 하는 문신을 찾고 있습니다.

즉,당신은 당신을 디버깅하면 분할 방법으로 작은 방법이 있습니다.만약 당신이 그렇게 한다면,메서드 이름은 일반적으로 충분하의 위치를 정확하게 예외입니다.지 않은 나는 깨닫는 항상 옵션이지만,그것은 고려 가치가있다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top