c++ - GDB 自动激活并具有 100% 的 CPU 事件

标签 c++ linux gdb

我正在使用 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/

相关文章:

linux - 我怎么知道编译内核代码时是否有错误?

linux - 如何使用 shell 更改 alsa 特定设备的音量?

c - 运行 gdb 时的调用消息

c - 进程内存检查

C++ 在 std::map 中存储对值的引用

c++ - 如何在 C++ Win32 应用程序中创建 Windows 风格的文本框

c++ - 如何在 C++ 中通过我的应用程序共享 "this"实例?

c++ - 我如何在 Qt Designer 中将标题和一些内容放在它下面?

linux - 我们如何在 bash 脚本中既不使用 sort 也不使用 ls 对文件进行排序?

c - 获取 i386 架构下 BusyBox 的 gdb 二进制文件