使用GDB调试模板

14

我的gdb是GNU gdb Red Hat Linux (6.3.0.0-1.162.el4rh)版本的,我无法调试模板。我该如何使用这个调试器来调试模板?


你的问题不够清晰。代码片段、你已经做了什么、哪些部分出现了问题——这些都可以帮助我们帮助你。 - Kirill V. Lyadvinsky
2个回答

11
如果您的问题只是在代码中放置断点,这里有一小段代码片段。
例如: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 6.8调试使用gcc版本4.4.1编译的模板代码,但遇到了困难。

在苦苦思索一段时间后,我发现只需将-fPIC开关添加到g++编译参数中,就神奇地完美解决了问题。


2
你好 Bo 和 Ferd,我很好奇-fPIC(即位置独立代码)是如何帮助你们调试 C++ 模板程序的。如果你们能分享一下你们的见解,我将不胜感激。 - ind79ra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接