2010-07-24 2 views
4

C++/CLI에서 혼합 모드 어셈블리로 작업하고 있습니다. 모든 관리 모드는 pdb가 혼합 모드 어셈블리에서 성공적으로로드 될 때로드되지만 네이티브 pdb의 정보가 모듈 창 (예 : VS 디버그 -> Windows -> 모듈)에 표시 되어도 기본 dll과 pdb가로드되지 않습니다.혼합 모드 어셈블리가 네이티브 C++ pdb에 대한 심볼을로드하지 않음

나는 네이티브 dll을 사용하고 C++/CLI 코드의 혼합 어셈블리에서 내 보낸 함수를 호출하고 있습니다. 함수는 성공적으로 호출되지만 네이티브 pdb 심볼은 로딩되지 않고 네이티브 코드의 모든 중단 점은 빈 원으로 표시되고 도구 팁에는이를 위해로드 된 심볼이 없다고 표시됩니다.

나는 모든 것을했는데, pdb는 현재 디렉토리에있는 관리되는 프로세스가 시작될 위치에 있습니다. 모든 obj 및 debug 폴더를 삭제하고 동시에 모든 프로젝트를 다시 컴파일합니다. 나는 심지어 ChkMatch 유틸리티를 사용하여 Exe와 해당 pdb의 기호가 일치 함을 보여줍니다.

관리되는 (C++/LCI 혼합 모드) 코드에서 호출하는 동안 네이티브 코드의 중단 점을 활성화하는 방법이 있습니까?

감사합니다,

우스만은

+0

태그 'winpdb'가 제거되었습니다. winpdb는 특히 혼란스러운 이름을 가진 파이썬 디버거입니다. 전설적인 대답에 대해서는 –

답변

15

혼합 모드 디버깅은 마구잡이 대부분 놓칠 수 있습니다. 먼저 혼합 모드 디버깅이 활성화되어 있는지 확인하십시오. C# 프로젝트에서 프로젝트 + 속성, 디버그, 관리되지 않는 코드 디버깅 사용 확인란입니다. 그런 다음 혼합 모드 디버깅은 64 비트 프로세스에서 사용할 수 없습니다. 64 비트 운영 체제에서 실행하는 경우 .exe가 32 비트 모드에서 실행되도록하십시오. 프로젝트 + 속성, 빌드 탭, 플랫폼 대상 = x86.

다음으로 디버거가 .pdb 파일을 찾는 위치를 확인하십시오. Debug + Windows + Modules 창에서 DLL을 마우스 오른쪽 단추로 클릭하고 "Symbol load information"을 선택하십시오. 마지막 비효율적 인 코드에서는 __debugbreak()를 사용합니다.

+1

+1. –

+0

64 비트 혼합 모드 디버깅은 .NET Framework 4에서 작동합니다. – empty

관련 문제