Bitcoinをカスタマイズする際にエラーで落ちて出力されたCoreファイルをトレースする

Bitcoin(ビットコイン)

bitcoinの開発を行なっているとどうしてもセグメンテーションエラーなどでプログラムがとまってCoreファイル吐いて落ちたりします。

そんなときはCoreファイルを解析するとデバッグがしやすいです。

Sponsored Link


エラーの詳細を調べる

やり方は簡単で、Bitcoinがセグメンテーションエラーで落ちると core.bitcoind.XXXXX のようなエラーファイルが作成されます。
(そもそも、Bitcoinのソースをカスタマイズしてコンパイルしないとこんな状況には落ちいらないのですが、、、)

そのあと、gdbというコマンドで解析をします。

gdb 実行可能ファイル名 Coreファイル

がフォーマットでbitcoindをいじっていた場合は

gdb bitcoind core.bitcoind.XXXXX

のようなコマンドを入力することになるかと思います。

スタックトレース

gdbを起動したあとのプロンプト上で”bt”と打つと、以下のような出力がされます
(以下出力は参考サイトのものを流用させてもらってます)

(gdb) bt
#0 0x0073c470 in strcpy () from /lib/libc.so.6
#1 0x08048c25 in Splitf (dest=0xbf9c5ce4 “”, sz=20, src=0x8048d34 “a,b,,sd,,,,as,sds,”, delmit=0x8048d48 “,”, field=0) at ./strutl.c:300
#2 0x080485c5 in main () at ./main.c:13

ここからさらにエラー発生時の変数が何が入ってるいるかは frame と p コマンドを使います。

たとえば、#1のSplitfを呼び出した際の状態を再現するには”frame”を使います

(gdb) frame 1
#1 0x08048c25 in Splitf (dest=0xbf9c5ce4 “”, sz=20, src=0x8048d34 “a,b,,sd,,,,as,sds,”, delmit=0x8048d48 “,”, field=0) at ./strutl.c:300
300 strcpy(dest,tp);

上記の結果からstrcpyの時におちていることがわかるので、変数の dest, tp があやしいので”p”コマンドを使ってこれらを調べてみると

(gdb) p dest
$1 = 0xbf9c5ce4 “”
(gdb) p tp
$2 = 0x0

tp が nullpointerになってますね。これが原因のようです。

というように、bitcoindに関しても同じ感じで原因を調査することができます。

みなさん、bitcoindがCoreファイルを出力したらこれをためしてみましょう。デバッグ早くなりますよー。
(bitcoindカスタマイズするような人はすでにしっている方が多そうですが、備忘録です)

参考

Sponsored Link

ビットコイン(Bitcoin)、イーサリアム(Ethereum)、リップル(Ripple)、ネム(NEM)などの仮想通貨を買うならZaifがおすすめです。

特に国内でETHを購入するなら、アルトコインでも板取引に対応しているZaif(ザイフ)が割安なのでよいですよ。

コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


仮想通貨全般
Stablecoin(ステーブルコイン)とは?

最近Stablecoinのツイートをよく見ており、次の仮想通貨の本命などと言われています。 ステーブ …

仮想通貨全般
難易度調整(Difficulty Adjustment)アルゴリズムとは?

最近、Monaが攻撃を受けて被害がでた件ですが 上記、大石さんの記事を引用しますが 攻撃を容易にした …

ICO
ICO Platformはどんなものがあるか?

ICO Platform にどんなものがあるか調べてみました。 ここで取り上げているICO Plat …