我正在使用Debian x64 2.6.26来托管我们用C ++编写的服务器应用程序。有时GDB会自行激活,它使用100%的CPU时间,无法运行其他进程。 GDB版本是6.8-debian。我不知道为什么会这样,我怎么能阻止这种情况。它似乎只在服务器应用程序运行时发生。我需要知道如何阻止这种情况发生,或者如果我们的应用程序出现问题,那我怎么能找到它。非常感谢任何帮助。
由于
答案 0 :(得分:3)
我倾向于相信某些代码中的信号处理程序会调用GDB。另一个嫌疑人是一些系统监控守护进程,如'monit'。当流氓进程占用过多内存或CPU时,可能会尝试使用GDB进行回溯或转储。在解决问题的方法是在GDB进程中使用'lsof',看看GDB打开了哪些文件,看看它是否给你任何线索。使用'ps -ef -o cmd,pid,ppid | grep -i gdb',你可以弄清楚GDB是如何启动的,如果它给你附加过程的PID,你就会知道正在检查哪个进程。
存根这种自动执行的大锤方法正在用“GDB”取代“GDB”,它不会做任何事情。不存在GDB可能会发出错误信号。当我没有时间深入研究问题时,我已经做了这些肮脏的伎俩。在存根GDB中,您可以记录所有命令行参数和调用进程名称。
'C'中的示例存根:
#include <stdio.h>
int
main(int argc, char *argv[]) {
size_t sz;
FILE *fp = 0;
fp = fopen("/tmp/gdbstub.log", "a");
if (fp) {
fprintf(fp, "\n%s invoked:", argv[0]);
for (sz = 0; sz < argc - 1; sz++) {
fprintf(fp, "%s ", argv[sz]);
}
fclose(fp);
}
return 0;
}