シェルの競合とデバッグ方法

シェルの競合とデバッグ方法

Linux上で実行されているCアプリケーションの一部としてライブラリ関数を使用してスクリプトを呼び出しますsystem( )。このスクリプトは、接続されているUSBフラッシュドライブをマウント解除します。非常に少ない回数(7〜8,000回のうち1回)の繰り返しで分割エラーが発生します。

/bin/sh: 行 1: 18083 分割エラー (コアダンプ)

デバッグ印刷により、システム()によってエラーが発生したことを確認しました。これはシェル衝突のようです。分割エラーが発生する理由を理解する必要があります。

私のスクリプトには次のコードが含まれています。

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 リポジトリで使用できます。

straceLinux用の診断、デバッグ、およびガイドユーザースペースユーティリティ。システムコール、シグナリング、プロセス状態の変更など、プロセスとLinuxカーネル間の相互作用を監視および変調するために使用されます。

システム管理者、診断専門家、およびトラブルシューティングは、ソースコードを追跡するために再コンパイルする必要がないため、簡単に利用できないプログラムの問題を解決するのに役立ちます。

関連情報