2012-10-30 2 views
0

gdb가 로컬 변수 나 현재 줄 번호와 같은 디버깅 정보가 부족한 템플릿 함수를 인라인하는 것을 방지하려고합니다.gcc gdb 디버깅 정보 없음

사실, 이것은 템플릿 함수를 인라이닝 (inlining)하는 것과 관련이 있습니다. 이것이 내 호출 스택의 아무 것도 액세스 할 수없는 유일한 상황이기 때문입니다.

나는 거의 내가 할 수있는 모든 g에서 같은 ++ 옵션을 시도했다 : 아무 효과 __attribute__ ((noinline)) 내 기능을 접두어로 간주

-DDEBUG -O0 -fno-inline -fno-implicit-inline-templates 

, 심지어 있습니다.

내 호출 스택에는 행 번호와 내가 어떤 어떤 디버깅 정보가없는

#0 CVector<CGatherColor>::operator[] (this=0x9324480, index=1208) at ../utils/vector.h:28 
#1 0x0000000000ee1d27 in unsigned int CBrdfLoop::trace_t<CAreaLightSquare, CNoCulling, CAreaLightSquare, CBrdfLdSampler>(int, unsigned int, CPrimMBVH*, CVector<CBrdfCache::CVertexCache>*, CAreaLightSquare&, CNoCulling&, CAreaLightSquare&, CBrdfLoop::CVtxSmpInfo const&, CBrdfLdSampler&)() 
#2 0x0000000000eb52ac in void CBrdfLoop::illuminate_t<CAreaLightSquare, CAreaLightSquare, CBrdfLdSampler>(unsigned int, CBrdfLdSampler&, CVector<CBrdfCache::CVertexCache>*, CAreaLightSquare&, CAreaLightSquare&, unsigned int, CPrimMBVH*)() 

과 같을 것이다. g ++ 4.4.5로 컴파일하고 GNU gdb (GDB) Fedora (7.1-34.fc13)로 디버깅합니다.

나는 꽤 고생하고 디버깅이 어렵다. 아무런 선택도없고 printf를 남겨둔다. 내가 사용하는 버전의 알려진 문제점은 무엇인가?

업데이트 : 최신 버전의 gcc/gdb에서는 문제가 없습니다. gcc/gdb 버그와 같습니다.

+1

캡틴 분명 : -g를 사용합니까? 그것은 시도한 옵션에 나열되어 있지 않습니다. –

+0

그래, -ggdb를 사용하여 gdb에 대한 디버깅 정보가 있는지 확인합니다. 여기에 내 컴파일 옵션이 있습니다 : 'g ++ -c -DDEBUG -O0 -fno- 인라인 -fno-implicit-inline-templates -Wno-deprecated -ggdb -Wall -fPIC -MD -msse2' – BenMercs

답변

1

자세한 디버깅 정보를 얻으려면 -g3 기호를 사용하는 것이 좋습니다. 그러면 흐름을 디버깅하는 데 사용할 수있는 완전한 코드 수준 정보가 생성됩니다.