lisz-works

技術と興味の集合体

コアダンプ解析のファイル指定を簡略化するshellを作った

【スポンサーリンク】

プログラムのソースコード

コアダンプの調査に、実行と解析を繰り返し行っていました……

「毎回ファイル名調べて、gdb実行するの超めんどい……」

ということで、簡単にgdbを実行するためのshellを作りました!

コアダンプのgdbを実行するshell

実行ファイルとコアダンプを指定すると、gdbを実行するshellです。

まずコレを、「~/bin/」とかに設置します。

#!/bin/bash
# arg1: application file name
# arg2: core dump file fullpath

if [ $# -ne 2 ]; then
    echo 2 arguments are required.
    exit 0
fi

app=$1
file=$2

gdb ${app} ${file}

これで

core a.out core.xxxx

みたいに実行すればgdbでコアダンプを開けます。

プロジェクトでコアダンプのgdbするshell

毎回2つ引数を渡すのも面倒なので、プロジェクト内に実行用shellを作ります。

#!/bin/sh

file=""
if [ "$1" = "" ]; then
    file=`ls -1t /var/core | sed -n 1P`
else
    file=${1}
fi

echo "target file: ${file}"
core a.out /var/core/${file}

これでこのshellを叩けば、勝手にコアダンプをgdbが開いてくれます。

ついでに引数としてコアダンプ名を渡すと、そのコアダンプファイルを開いてくれます。

この3つ(実質2つ)は固定値として指定しているので、設定や環境に応じて変更してください。

  1. ファイル取得先(/var/core)
  2. 実行ファイル(a.out)
  3. コアダンプの格納パス(/var/core/)

最新ファイル名を取得

プロジェクト用shellでファイル取得に使っている、対象パスの最新ファイル名を取得するコマンド。

$ ls -1t <検索条件> | sed -n 1P

「出力した最新のファイルを使ってゴニョゴニョする~」

ということをshellなどで簡略化したいとき、めっちゃ便利です。

あくまでlsで表示されたものの先頭を取得しているので、検索条件でフィルタをすれば

「対象パスの対象ファイルの最新ファイル名」

のような指定もできます。

参考

コチラを参考にしました。ありがとうございました!

qiita.com

あとがき

コアダンプ解析を実行するshellを作る方法でした!

コアダンプは出ないに越したことがないのですが、出ると

「どうやって調べるんだっけ?」

となったり

「毎回ファイル指定するのダルい……」

となるので、こういう大したことないけど何回もやる面倒なものは、簡略化するに限りますね。

よければ参考にしてみてくださいー!

www.lisz-works.com