2009-11-03 134 views
10

我的gdb是GNU gdb Red Hat Linux(6.3.0.0-1.162.el4rh)。我无法调试模板。如何使用此调试器调试模板?使用GDB调试模板

+0

你的问题还不够清楚。代码片段,你做了什么,什么不工作 - 所有这些都可以帮助我们帮助你。 – 2009-11-03 12:27:51

回答

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到 用gdb 6.8与gcc版本4.4.1

编译撕扯我的头发一段时间后代码代码,我发现它神奇 开始工作完美,当我-fPIC开关添加到G ++编译参数。

+2

Hello Bo和Ferd,我很想知道-fPIC,即与位置无关的代码如何帮助您调试C++中的模板程序。如果您分享您的见解,我会很感激。 – indranil 2015-08-05 07:50:11