Shell 崩溃以及如何调试它

Shell 崩溃以及如何调试它

作为在 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 内核之间的交互,包括系统调用、信号传递和进程状态的更改。

系统管理员、诊断人员和故障排除人员会发现,它对于解决源代码不易获得的程序问题非常有用,因为不需要重新编译它们来跟踪它们。

相关内容