【问题标题】:debugging templates with GDB使用 GDB 调试模板
【发布时间】:2009-11-03 12:10:13
【问题描述】:

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

【问题讨论】:

  • 你的问题不够清楚。编码 sn-ps,你做了什么,什么没用——所有这些都可以帮助我们帮助你。

标签: c++ linux templates gdb


【解决方案1】:

如果您的问题只是在代码中放置断点。这是一个小sn-p

例如: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

【讨论】:

    【解决方案2】:

    我很难让 gdb 调试到 使用 gdb 6.8 处理模板代码和使用 gcc 4.4.1 版编译的代码

    扯了一会儿头发,我发现它很神奇 当我将 -fPIC 开关添加到 g++ 编译参数时,开始完美运行。

    【讨论】:

    • 您好 Bo 和 Ferd,我很想知道 -fPIC(即位置无关代码)如何帮助您在 C++ 中调试模板程序。如果您愿意分享您的见解,我将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2017-03-17
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多