2009-11-03 22 views
10

Mój gdb to GNU gdb Red Hat Linux (6.3.0.0-1.162.el4rh). I nie mogę debugować szablonów. Jak mogę debugować szablony za pomocą tego debuggera?Szablony do debugowania z GDB

+0

Twoje pytanie nie jest wystarczająco jasne. Fragmenty kodu, co zrobiłeś, co nie działa - wszystko to może nam pomóc. –

Odpowiedz

10

jeśli Twoim problemem jest właśnie umieszczenie punktu przerwania w kodzie. Oto mały fragment

ex: 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)); 
} 

skompilować z 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 

inaczej można po prostu użyć

(gdb) b main.cpp:16 
0

Ciężko mi było próbować debugować gdb do pracy z szablonami kod przy użyciu gdb 6.8 z kodem skompilowanym z gcc w wersji 4.4.1

Po zgraniu moich włosów na chwilę odkryłem, że magicznie zaczął działać idealnie, gdy dodam przełącznik -fPIC do argumentów kompilacji g ++.

+2

Witam Bo i Ferd, jestem ciekawa, w jaki sposób -fPIC, tj. Niezależny od pozycji kod, pomógł ci zdebugować programy szablonów w C++. Będę wdzięczny, jeśli podzielicie się swoimi spostrzeżeniami. – indranil

Powiązane problemy