放置由GDB执行的代码

时间:2012-05-11 17:53:26

标签: c++ debugging gdb

我有一个小问题。在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

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

3 个答案:

答案 0 :(得分:1)

尝试使用stdout将stderr和freopen重定向到文件。见this

这是在运行时将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;
}

答案 1 :(得分:1)

static int gdb = 0;
void gdb_print(char const * msg) {
    if(gdb) printf("\tGDB: %s\n", msg);
}

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

答案 2 :(得分:1)

  

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

您始终可以使用以下方式写入控制台:

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

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