gdb调用函数 - 如何使用std :: cout作为参数?

时间:2017-02-23 18:25:08

标签: c++ gdb

我有以下代码:

#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)'.

任何建议如何通过&#34; std :: cout&#34;在gdb调用函数?

[UPDATE] 实际上是因为gdb,我使用的是7.2;切换到7.11.1后,它运行正常。

1 个答案:

答案 0 :(得分: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)