2009-11-03 13 views
10

Mi gdb es GNU gdb Red Hat Linux (6.3.0.0-1.162.el4rh). Y no puedo depurar plantillas. ¿Cómo puedo depurar plantillas con este depurador?plantillas de depuración con GDB

+0

Su pregunta no es lo suficientemente clara. Los fragmentos de código, lo que ha hecho, lo que no funciona; todo eso podría ayudarnos a ayudarlo. –

Respuesta

10

si su problema es solo colocar un punto de interrupción en su código. Aquí hay un pequeño fragmento

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

compila con 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 

de lo contrario es posible que utilices

(gdb) b main.cpp:16 
0

Estaba pasando un momento difícil tratando de obtener la depuración de gdb en trabajo con plantillas código usando gdb 6.8 con código compilado con gcc versión 4.4.1

Después de rasgar mi cabello por un tiempo, encontré que mágicamente comenzó a funcionar perfectamente cuando agregué el modificador -fPIC a los argumentos de compilación g ++.

+2

Hola Bo y Ferd, tengo curiosidad por saber cómo -fPIC, es decir, el código de posición independiente, te ha ayudado a depurar programas de plantilla en C++. Estaré agradecido si amablemente comparte sus ideas. – indranil

Cuestiones relacionadas