回答:
はい、Bash Debugger Projectがあります。
set -x
またset -v
、実行時に使用することもできます。詳細:
http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/debugging.html http://www.cyberciti.biz/tips/debugging-shell-script.html
がんばろう!
現在、Visual Studio Code Bash Debug拡張機能があります。「ステップイン/アウト/オーバー」があり、各変数の値を表示できます。
shellcheckは町で最高です-
また、vimと統合することもできます。これがgitリポジトリです。
この小さな関数を使用して、「コンソール」にドロップできます。
function debug
{
echo "#############| Entering DEBUG mode |####################";
cmd=""
while [[ $cmd != "exit" ]]; do
read -p "> " cmd
case "$cmd" in
vars ) ( set -o posix ; set );;
exit ) ;;
* ) eval "$cmd";;
esac
done
echo "#############| End of DEBUG mode |####################";
}
次に、スクリプト内で(例):
for file in *; do
...
if [[ $file == "strange_case.txt" ]]; then
# break the code here to analyze:
debug
fi
...
done
ローカル変数をそのままにして、コマンドを受け入れます。「デバッグ」モードを終了するには、「exit」と入力し(スクリプトを終了しません)、コードを続行します。ループ内で「デバッグ」を使用すると、毎回停止します。(上記の例のように)「if」で囲むか、「ウォッチ」関数を作成できます。
function debug_watch
{
if [[ $1 == $2 ]]; then
debug
fi
}
# And Use it:
debug_watch "$file" "strange_case.txt"
また、使用可能なすべての変数とその値をダンプする「vars」コマンドも追加しました。独自のカスタマイズされたコマンドも追加できます。
数分でコードを作成したので、自己責任で使用してください。デバッグモードでは任意のコマンドを実行できるため、本番スクリプトに残すとセキュリティ上のリスクが生じることに注意してください。
NESが言っていることに合わせて、bashにデバッグ用のフラグを設定します。
set -x
フラグが設定され、端末から、またはスクリプト内からいずれかの設定を解除することができます。+
またはを使用-
:
#!/bin/bash
#fileinfo
ls -l $1
set -x # start debugging here
wc -l $1
set +x # stop debugging here
file $1
set -v # start verbose output
w | more
echo ""
echo -n "Number of users: "
set +v # end verbose output
who | wc -l
ここでは何set
のコマンドが実行します。
set -f
メタキャラクターを使用したファイル名の生成を無効にします。set -v
読み取られたとおりに(詳細な)シェル入力行を出力します。set -x
コマンドを実行する前にコマンドトレースを出力します。set
実際には多くの機能がありますが、シェル組み込みツールであるため、manページはありません。セットのマニュアルはGNU Bashのドキュメントにあります。
次のようなプログラムの詳細を取得するのに役立つコマンドラインツールが多数あります。
stat
ファイルまたはファイルシステムのステータスを表示する file
ファイルの種類を決定します。hexdump
指定されたファイルをさまざまな形式で表示するフィルターnohup
ハングしないスクリプトを実行する
その他多数。隠されたキャラクターを表示するコマンドを考えていましたが、今はできません。Hexdumpはそれを行いますが、より良いものがあります。
キーコマンドctrl\は、実行中のプログラムまたはスクリプトをコアダンプします。その後、コアダンプを分析できます。おそらくgdbを使用してコアダンプを分析しますが、そのための多くのプログラムが存在します。
bashシェルには、デバッグ用の気の利いたオプションもいくつかあります。options --debugger
、-v
verbose、--dump-strings
およびその他の気の利いたオプションが役立ちます。を使用してチェックアウトしman bash
ます。
trap
コマンド(に建てられたシェル)があなたのために非常に有用である可能性があります。トラップは、プログラムが予期せず終了した場合、何かを実行します。トラップ、およびその他の便利なBash Shellビルトインについては、こちらをご覧ください。
今のところ一般的に言えば、デバッグはどの言語でも大きなトピックです。プログラミング言語でのデバッグに役立つ他のトピックには、シェルリダイレクト、信号処理などがあります。
最後に、私が使用した例は些細なものであることに気づきましたが、一部のシェルスクリプトは数百行になることもあります。そのような状況では、コメントタグを挿入し、問題があると思われるコードをブロックするか、または、終了コマンドを挿入し、分割統治法を使用して、破損したコードから機能コードを分離しようとします。
bashスクリプトをデバッグするためのGUIオプションは、BashEclipse / Shelledプラグインを備えたEclipse IDEです。
これにより、質問の機能(breakpoints and stuff
)と、複雑なbashスクリプトをデバッグするための他の多くの機能が提供されます。
機能の一部は次のとおりです:
(https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script)
を使用する手順はShelled
、BashEclipse
Eclipseにとプラグインを追加することです。次に、BashEclipse read meテキストファイルで提供されている手順を実行して、デバッガーを起動します。
* ) eval "$cmd" ;;
とdebug_watch "$file" strange_case.txt
。