2010-02-20 4 views
0

내 C 코드의 프로파일 링에 gprof을 사용했지만 Luke Stackwalker와 같은 GUI 기반 Windows 응용 프로그램을 사용하고자합니다. 누가 지금 무엇에Luke Stackwalker가 실행 중 오류를 반환하면 gprof가 정상적으로 작동합니다.

Launching executable C:\lshare\POT03\Eclipse\Debug\POTaak3.exe. 
SymInit: Symbol-SearchPath: ';.;C:\Program Files\Luke Stackwalker;C:\Program Files\Luke Stackwalker;C:\WINDOWS;C:\WINDOWS\system32;SRV*C:\websymbols*http://msdl.microsoft.com/download/symbols;', symOptions: 530, UserName: 'Pieter' 

OS-Version: 5.1.2600 (Service Pack 3) 0x100-0x1 

C:\lshare\POT03\Eclipse\Debug\POTaak3.exe:POTaak3.exe (00400000), size: 61440, SymType: '-unknown-', PDB: '$Tƒ|' 
C:\WINDOWS\system32\ntdll.dll:ntdll.dll (7C900000), size: 753664, SymType: '-unknown-', PDB: '©Uƒ|' 
C:\WINDOWS\system32\kernel32.dll:kernel32.dll (7C7D0000), size: 1048576, SymType: '-unknown-', PDB: '©Uƒ|' 
C:\WINDOWS\system32\msvcrt.dll:msvcrt.dll (77BE0000), size: 360448, SymType: '-unknown-', PDB: '©Uƒ|' 
ERROR: SymGetModuleInfo64, GetLastError: 1114 (Address: 7C90E514) 
Sorting profile data. 
Done; 2 samples collected at 1.$ samples/second. 

샷 : gprof 작품 완벽하게 내 바이너리에 잘하지만, 누가 복음 Stackwalker 어떤 문제가? 여기서 내가 뭘 잘못하고 있니? -pg 플래그를 사용하는 것을 기억했습니다.

+0

이 오류가 발생하지 않았습니다. 이것은 64 비트 실행 파일입니까? (필자는 32 비트 실행 파일 만 사용해 보았습니다). 저는 항상 Visual Studio 2003으로 컴파일하고/Zi 옵션을 사용하여 디버그 정보를 생성합니다. Luke Stackwalker가 gcc 디버그 정보를 인식하지 못했습니까? gcc가 Visual Studio와 호환되는 디버그 정보를 만들 수 있습니까? – Patrick

+0

gcc 문서를 찾았습니다. gcc 프로파일 러 (gprof)를 사용하여 프로필을 작성하려면 -pg를 사용해야합니다. Luke Stackwalker를 사용하면 디버그 정보를 제외하고 애플리케이션에서 특별한 것을 필요로하지 않는 외부 프로파일 러를 사용하고 있습니다. -pg를 제거하고 실행 파일에 디버그 정보를 생성하는 옵션을 추가하십시오. -g이면 충분하지만 작동하지 않으면 다른 디버그 형식을 찾아야 할 수도 있습니다. 희망이 도움이됩니다. – Patrick

+0

나는 그걸로 운이 없었어요. 'SymType : '-unknown-''은 중요한 단서가 될 수 있습니다. – Pieter

답변

0

이유를 알고 싶습니다. something other than gprof. 루크 스택 워커 (Luke Stackwalker)는 스택 샘플을 취하지 만, (내가 마지막으로 체크했을 때) 코드 라인 수준에서 사용 된 벽시계의 전체 시간을 요약하지는 않습니다. Linux의 경우 lsstack 또는 pstack을 사용할 수 있으며 Windows에서는 비슷한 도구가 있어야합니다. 귀하의 상황에서 IDE의 일시 중지 단추를 사용하여 stackshots을 사용합니다.

0

SymType -unknown은 프로그램이 디버그 정보를 생성하기 위해 gcc -g 옵션으로 컴파일되지 않았거나, Luke Stackwalker가 사용하는 microsoft debughelp 라이브러리에서 디버그 정보 형식을 인식 할 수 없음을 의미합니다.

프로그램 컴파일시 (실행 파일 제거 제외) -g 옵션을 사용하고 있는지 확인하십시오. 그렇지 않으면 사용중인 gcc 버전을 아는 것이 좋습니다.

+0

'gdb'가 소스 코드에 접근하는 데 아무런 문제가 없기 때문에'-g'로 컴파일되고 있다고 확신합니다. gcc 버전 정보 :'gcc (GCC) 3.4.5 (mingw-vista special r3)' – Pieter

+0

시도해 보니 작동하지 않는다. Luke는 실행 파일의 디버그 정보를 읽지 못합니다. 이상한 것은 내가 전에 이것을 시도했고 그것이 효과가 있었음을 맹세한다. 그러나 지금 나는 그것을 일하게 만들 수 없었다. –