2009-11-03 3 views
10

내 gdb는 GNU gdb Red Hat Linux (6.3.0.0-1.162.el4rh)입니다. 그리고 템플릿을 디버깅 할 수 없습니다. 이 디버거로 템플릿을 어떻게 디버깅 할 수 있습니까?GDB로 디버깅 템플릿

+0

질문이 명확하지 않습니다. 코드 스 니펫, 수행 한 작업, 작동하지 않는 것 - 모두 도움이 될 수 있습니다. –

답변

10

문제가 방금 코드에 중단 점을 배치하는 경우. MAIN.CPP

#include <iostream> 

template <typename T> 
void coin(T v) 
{ 
    std::cout << v << std::endl; 
} 

template<typename T> 
class Foo 
{ 
public: 

    T bar(T c) 
    { 
     return c * 2; 
    } 
}; 

int main(int argc, char** argv) 
{ 
    Foo<int> f; 
    coin(f.bar(21)); 
} 

컴파일 g ++ -O0 -g MAIN.CPP

gdb ./a.out 
(gdb) b Foo<int>::bar(int) 
Breakpoint 2 at 0x804871d: file main.cpp, line 16. 
(gdb) b void coin<int>(int) 
Breakpoint 1 at 0x804872a: file main.cpp, line 6. 
(gdb) r 
... debugging start 

그렇지 않으면 당신은 단지

(gdb) b main.cpp:16 
0
사용할 수 있습니다 여기에

이 전 조금 조각이다

나는 gdb 디버깅을 시도하는 데 어려움을 겪고 있었다. 템플릿으로 작업한다. G 코드 6.8을 gcc 버전 4.4.1로 컴파일 한 코드 사용

잠시 머리카락을 찢은 다음, g ++ 컴파일 인수에 -fPIC 스위치를 추가하면 마술처럼 이 완벽하게 작동한다는 것을 알았습니다.

+2

Hello Bo와 Ferd, C++에서 템플릿 프로그램을 디버깅하는 데 -fPIC, 즉 위치 독립 코드가 어떻게 도움이되었는지 궁금합니다. 나는 당신이 당신의 통찰력을 친절하게 이야기한다면 감사 할 것입니다. – indranil

관련 문제