2017-02-23 86 views
2

我有以下代码:gdb调用函数 - 如何使用std :: cout作为参数?

#include <iostream>  

using namespace std; 

namespace ns 
{   
    class D 
    { 
     int n; 

     public: 
     D(int _n):n(_n){} 

     void dump(ostream &os); 
    }; 
}; 

void 
ns::D::dump(ostream &os) 
{ 
    os << "n=" << n << std::endl; 
} 

int main() { 

    ns::D d(200); 

    return 0; 
} 

在GDB,当我发出命令,call d.dump(std::cout),在该行return 0;,我得到这个GDB错误:

A syntax error in expression, near `cout)'. 

任何建议,我怎么能传递gdb调用函数中的“std :: cout”?

[UPDATE] 其实这是因为gdb,我用的是7.2;在我切换到7.11.1后,它工作正常。

+0

什么的'摹版本++'和'gdb' ?什么汇编标志? –

+1

gdb在完整的C++支持方面并不是很出色,我也没有真正期待它。为了做这样的事情,gdb必须是它自己的C++编译器,并且理解类型转换和继承等语言的核心方面。 –

回答

1

我使用:

GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1 

我很快意识到,调试器没有看到std::cout符号可言,可能是因为它不是在你的代码中使用。所以我改变了主要功能如下:

int main() { 
    std::cout << "Hello world!" << std::endl; 
    ns::D d(200); 
    return 0; 
} 

,现在当我运行调试器,我可以毫无问题地执行您的来电:

(gdb) break main 
Breakpoint 1 at 0x400955: file main.cpp, line 24. 
(gdb) run 
Starting program: gdb_cout/main 

Breakpoint 1, main() at main.cpp:24 
24  int main() { 
(gdb) next 
25  std::cout << "Hello world!" << std::endl; 
(gdb) next 
Hello world! 
26  ns::D d(200); 
(gdb) next 
27  return 0; 
(gdb) call d.dump(std::cout) 
n=200 
(gdb) 
相关问题