Windbg를 사용하여 관리 코드 (C#, 모든 CPU 용으로 작성된 콘솔 응용 프로그램)에서 크래시 덤프를로드하고 x64 플랫폼에서 크래시 덤프를 만듭니다. x64 플랫폼에서 디버깅 중입니다.개인 기호가로드되었지만 줄 번호가 표시되지 않았습니까?
내 응용 프로그램의 개인 기호를로드하려면 다음 명령을 사용하십시오. 다음은 Windbg에서 사용하는 명령입니다.
다음 명령을 사용할 때 스택 추적에 줄 번호 정보가 표시되지 않습니다. 어떤 아이디어가 잘못 되었나요? 소스 경로를 설정해야합니까?
0:016> ~6 e!clrstack
편집 1 : 예외가 발생하는 스택 추적을 찾기 위해! pe 및! U를 사용하여 몇 가지 문제가 발생했습니다.
여기 내 디버그 프로세스입니다. 우선! U를 사용하여 예외 객체에 대한 스택 추적을 인쇄합니다!! U를 사용하여 코드를 분리합니다. 내가 찾은 문제는 다음과 같습니다! U는 FooService.ProcessOrders()의 모든 함수 코드를 분해하여 함수 FooService.ProcessOrders에서 충돌이 발생한 정확한 위치를 찾고자합니다. 또한 diassembled 주석이 달린 일리노이 코드 (예 : a * a * 2, 단지 어셈블리 언어가 표시됩니다 비 - 함수 호출 C# 코드에 대한), 정확히 일리노이 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
감사, 조지
고마워요! 내 응용 프로그램의 전체 소스 코드 (C# 관리 코드)가있는 크래시 덤프가있는 경우 Windbg를 사용하여 관리되는 코드 행에서 충돌 또는 중단되는 소스를 찾는 가장 쉬운 방법은 무엇입니까? Windbg가이 목표를 달성 할 수 없다면 다른 도구가 도움이 될 수 있습니까? – George2
크래시로 처리되지 않은 예외에 대해 이야기하고있는 것으로 생각합니다. 이 경우 적절한 스레드에서 예외를 찾을 수 있습니다. ! threads 명령을 사용하여 관리되는 모든 스레드와 예외를 표시하십시오. ! pe 명령은 예외 오브젝트를 자세히 나열합니다. 자세한 내용은이 훌륭한 블로그 http://blogs.msdn.com/tess/ –
을 참조하십시오. 예, 두뇌, 나는 처리되지 않은 예외에 대해 이야기하고 있습니다. 나는! pe를 사용하려고 시도했다!쓰레드들에 대해서는 약간의 정보를 제공하지만, 코드 (SqlException)의 예외는 내 코드의 특정 기능과 다른 몇 줄 (시나리오)에서 발생할 수 있습니다. 그리고! pe와! threads를 사용하면 예외가있는 함수를 알 수 있습니다. 그러나 함수가 다른 위치/시나리오에서 예외를 throw 할 수있는 경우 예외가 throw되는 위치를 나타내는 방법은 무엇입니까? – George2