GDB呼叫函数 - 如何使用std :: cout作为参数

gdb call function - how to use std::cout as parameter?

本文关键字:cout 参数 std 何使用 呼叫 函数 GDB      更新时间:2023-10-16

我有以下代码:

#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后,它可以正常工作。

我正在使用:

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)