【发布时间】:2015-05-01 13:40:24
【问题描述】:
我们正在编写一个相当大的系统,该系统由一组 C++ 程序构建而成。 (大量使用共享库)
当尝试使用 gdb 调试任何程序时,如果您设置断点并且(我猜)程序遇到断点,整个机器将立即崩溃并重新启动。
我不知道从哪里开始。 /var/log/messages 中没有任何内容。 dmesg 只显示机器正在重新启动。
连接的监视器会快速闪烁(我猜)内核恐慌消息,然后它就消失了。甚至无法阅读它是什么。 Centos 6 32 位分发版:
# uname -a
Linux 3.16.6 #1 SMP Fri Oct 31 18:56:38 SGT 2014 i686 i686 i386 GNU/Linux
# gdb --version
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1)
我似乎找不到任何日志文件。
怎么办?使用打印语句调试庞大的系统需要很长时间。重建内核?任何程序或建议表示赞赏。
【问题讨论】:
-
确保您没有硬件问题。而且您可能需要更多 RAM。你不能在 64 位 x86-64 机器上编译和运行吗?顺便说一句,您可以尝试编译更新的 GDB(从源代码),也许是更新的 GCC 和 binutils:当前 GDB 为 7.9,当前 GCC 为 5.1(2015 年 4 月)
-
感谢您的回复。迁移到 64 位是不可能的——带有 32 位第三方库的庞大代码库。除了 GDB 遇到断点时硬件崩溃之外,硬件没有显示其他问题。我将研究编译一个新的 GDB。大量可用内存:]# cat /proc/meminfo MemTotal: 8066316 kB MemFree: 5789964 kB MemAvailable: 7815828 kB
-
由于 CentOS 6 带有内核 2.6.32,您正在运行自己的自定义内核,对吗? gdb 的问题是从什么时候开始的?
-
是的,其中一个人为我们的硬件构建了内核(zotac MB with i7)。 GDB 和断点可以工作——在较小的程序上。但是在“大型应用程序”上打断点会使机器崩溃。包括 ACE/TAO、Agent++ 等外部库,大应用程序约为。 800K 行 C++