2010-12-17 5 views
7

동료 중 한 명이 고객에게 핫픽스 빌드를 제공 한 후 pdb 파일을 삭제했습니다. 문제의 빌드가 (간헐적으로) 충돌하고 우리는 몇 가지 충돌 덤프가 있습니다. 우리는 버전 관리에 모든 소스 코드를 가지고 있으며, 그것을 .exe로 컴파일하고 그 코드를 얻을 수 있습니다. 그러나 이러한 기호는 크래시 덤프와 정확히 일치하지 않습니다. 몇 가지 함수가 일정한 오프셋에 의해 해제 된 것처럼 보이지만, 우리는 한 줌을 살펴 봤습니다.exe에 대한 심볼을 재생성 할 수 있습니까?

나는 다음과 같은 작업을 할 수 있기를 원합니다. (수동으로 가짜 작업을 할 수는 있지만 엄청난 양의 작업입니다.) 덤프에있는 각 스레드에 대한 스택 추적을 얻고 덤프에 포인터를 캐스팅합니다. 적절한 유형을 선택하고 Visual Studio 디버거에 나타냅니다. 그게 중요한 일이라면 나는 2005 년을 사용하고있다.

원본 코드, 모든 .obj 파일 및 원본 .exe가있는 pdb를 다시 만들 수있는 도구가 있습니까? 아니면 우리가 컴파일/링크를 할 때 "정확히이 다른 exe와 똑같이 만드십시오"라고 말하는 것과 같은 것입니까?

지금까지의 답변에 기반한 빠른 업데이트 : 고객에게 보낸 exe 파일이 있습니다. 도움이된다면 해당 파일에 해당하는 pdb가 아닙니다. 나는 가능한 빨리 새 빌드를 보내지 않을 것입니다. 충돌 덤프를 실행하는 데 약 1 주일이 걸리기 때문에 고객은 이미 "왜 아직 수정되지 않았습니까?" 단계. (다른 빌드를 보내면 동일한 코드가 아니라 문제가 해결되거나 관심있는 영역에서 추가 디버깅을하는 것이 좋을 것입니다.) 일부 코드는 수동으로 수행 할 수 있습니다. 많은 추측; 그게 우리가 현재하고있는 일입니다. 하지만 고통이 따르므로 자동화하는 방법이 있기를 바랍니다.

+0

참조 http://stackoverflow.com/questions/744870/how-can-you-change-an-age-mismatched-pdb-to-match-properly 및 http://stackoverflow.com/questions/134866/windbg-dr-watson-minidump-requires-pdb-dll-installed-vers-installed-vers-for-vers- – wimh

+0

다음 달에 그를 요리하게하십시오. 한편, 다른 '핫픽스'를 보내십시오. –

+0

Wimmel의 링크가 나를 위해 일했습니다. 그것은 훌륭한 도구입니다. 당신이 당신의 코멘트를 대답한다면, 나는 그것을 받아 들일 것입니다. – Michael

답변

0

소스를 가지고있을 때, 소스와 exe 파일 사이의 일치를 쉽게 찾을 수 있습니다. 충돌 로그와 함께 exe 파일을 보내고 IDA를 사용하도록 요청하십시오.

"한 번만 사용"해야한다고 생각하는 것보다 훨씬 더 어려울 수 있습니다.

0

기존 실행 파일과 일치하도록 PDB를 다시 만들 수 없습니다. PDB에는 각 편집마다 고유 한 "지문"이 있습니다. 낡은 PDB를 마술처럼 재현 할 수 없다면, 머리 뒤쪽에있는 암소 머리를 쳐서 (NCIS를 본다면 깁스 스타일), 모든 것을 다시 컴파일하고, 안전한 장소에 PDB를 저장하고, 새로운 실행 파일을 보내야합니다 고객에게 전달하고 충돌이 발생하도록하십시오.

+0

O.o ... 꽤 엉망입니다. Windows와 같은 사운드는 동일한 아티팩트를 재생성하는 어려운 세상입니다. –

+0

Windows와는 아무런 관련이 없습니다. 그것은 Visual Studio의 것입니다. PDB없이 (만약 링커 맵 등을 가지고 있다면) 당신이 * 죽을 수있는 몇 가지 사후 디버깅을 할 수 있다고 생각합니다. 많은 부두교 기술이 필요합니다. :) –

+0

흥미 롭습니다. 가능한 한 유닉스 계열 시스템을 사용하는 것이 하나의 이유라고 생각합니다. IMHO, 바이너리 아티팩트를 정확하게 재생성 할 수 있어야합니다 (즉, 빌드를 완벽하게 반복 할 수 있어야합니다). 또는 문제를 확실하게 디버그하기가 너무 어렵습니다. –

1

빌드 시스템을 사용하여 히스토리에있는 리비전의 바이너리를 다시 만들 수 있다면 고객으로부터 빌드 ID를 가져와 모든 바이너리와 함께 동일한 정확한 빌드 ID를 다시 생성 할 수 있어야합니다 기타 등등. 물론 큰 프로젝트를 가지고 있다면 시간이 걸릴 것이지만, 필요한 디버깅 파일도 만들어 낼 것입니다.

빌드의 정확한 재생산을 수행 할 방법이없는 경우이 상황을보고 일부 다른 부분에 대해 열심히 생각하고 이동을 시작하여 모든 성공적인 빌드 및 관련 파일을 다시 생성 할 수 있습니다. 프로젝트의 역사. 이렇게하면 나중에 과 같은 문제를 쉽게 해결할 수 있습니다.

관련 문제