我有一个小问题。在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
如果它不存在,请告诉我您对此的看法!
答案 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的终端的方法(可能是调用程序本身的不同终端)。