0

我有一个小问题。是否可以在 C/C++ 中放置一些与 GDB 进行更多交互的代码?

假设我有一个类似的功能

void gdb_print(const char*);

这将在执行时在 gdb 中打印信息!如果不可能,那就太棒了。跟踪一些信息会很简单,而且以某种方式更快!

我需要这样的东西,因为我们正在编写一些插件,而来自 cout 或 cerr 的信息根本不会进入控制台。所以这将是一些离散的东西。此外,可以添加一些东西,如:

#ifdef __DEBUG__
  #define debug_msg(x) gdb_print(x)
#else
  #define debug_msg(x)
#endif

如果它不存在,请告诉我您对此的看法!

4

3 回答 3

1

我需要这样的东西,因为我们正在编写一些插件,而来自 cout 或 cerr 的信息根本不会进入控制台。

您始终可以使用以下命令写入控制台:

FILE *console = fopen("/dev/tty", "w");
if (console != NULL) fprintf(console, "Your debug message\n");

我不知道一种专门写入运行 GDB 的终端的方法(这很可能是调用程序本身的不同终端)。

于 2012-05-12T02:46:43.437 回答
1

尝试stdout使用freopen. 看到这个

stdout这是在运行时重定向到文件的示例代码:

/* freopen example: redirecting stdout */
#include <stdio.h>

int main ()
{
  freopen ("myfile.txt","w",stdout);
  printf ("This sentence is redirected to a file.");
  fclose (stdout);
  return 0;
}
于 2012-05-11T18:03:45.250 回答
1
static int gdb = 0;
void gdb_print(char const * msg) {
    if(gdb) printf("\tGDB: %s\n", msg);
}

在 gdb 中加载程序时,在 main 中设置断点,然后将 gdb 设置为非零值。这不是最干净的解决方案(当然也不是自动化的),但我认为它会给你你正在寻找的东西。确保使用每个处理器来删除非调试版本中的调用(让所有那些永远不会评估为真的额外比较毫无意义)。

于 2012-05-11T18:14:48.273 回答