![Shell 崩溃以及如何调试它](https://linux22.com/image/147877/Shell%20%E5%B4%A9%E6%BA%83%E4%BB%A5%E5%8F%8A%E5%A6%82%E4%BD%95%E8%B0%83%E8%AF%95%E5%AE%83.png)
作为在 Linux 上运行的 C 应用程序的一部分,我使用库函数调用脚本system( )
。此脚本对连接的 USB 闪存驱动器进行卸载。很少(7-8k 中 1 次)迭代,我会看到分段错误,
/bin/sh:第 1 行:18083 分段错误(核心已转储)
我已经通过调试打印验证了失败是由于 system() 造成的。这似乎是外壳崩溃。我需要了解为什么会发生分段错误。
我的脚本包含以下代码:
mount | grep "USB"
ret=$?
if [ $ret == "0" ]; then
umount -l /mnt/USB
ret=$?;
if [ $ret -eq 0 ]; then
rmdir /mnt/USB
fi
fi
gdb 在该平台上不可用,并且考虑到此问题很少发生,因此很难对其进行调试。
答案1
斯特雷斯有帮助。 AFAIK 它在默认的 yum/apt/whatever 存储库中可用。
strace
是 Linux 的诊断、调试和指导用户空间实用程序。它用于监视和篡改进程与 Linux 内核之间的交互,包括系统调用、信号传递和进程状态的更改。
系统管理员、诊断人员和故障排除人员会发现,它对于解决源代码不易获得的程序问题非常有用,因为不需要重新编译它们来跟踪它们。