我正在使用 Debian x64 2.6.26 来托管我们用 C++ 编写的服务器应用程序。有时 GDB 会自行激活,它使用 100% 的 CPU 时间,没有空间让其他进程运行。 GDB 版本为 6.8-debian。我不知道为什么会发生这种情况,我该如何防止这种情况发生。它似乎只在服务器应用程序运行时才会发生。我需要知道如何阻止这种情况发生,或者如果我们的应用程序有问题,我该如何找到它。非常感谢任何帮助。
谢谢
最佳答案
我倾向于相信 GDB 在某些代码中被信号处理程序调用。另一个嫌疑人是一些系统监控守护进程,如 'monit' .当流氓进程占用过多内存或 CPU 时,它可能会尝试使用 GDB 进行回溯或转储。排除故障的方法是在 GDB 进程上使用“lsof”并查看 GDB 打开了哪些文件,看看它是否能为您提供任何线索。使用 'ps -ef -o cmd,pid,ppid | grep -i gdb',你可以弄清楚 GDB 是如何启动的,如果它给你附加进程的 PID,你就会知道正在检查哪个进程。
对这种自动执行 stub 的大锤方法是用什么都不做的 stub “GDB”替换“GDB”。但是,不存在 GDB 可能表示错误。当我没有时间深入研究问题时,我做了这些卑鄙的把戏。在 stub GDB 中,您可以记录所有命令行参数和调用进程名称。
“C”中的示例 stub :
#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;
}
关于c++ - GDB 自动激活并具有 100% 的 CPU 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1886606/