議論/スタックトレース


Top / 議論 / スタックトレース

スタックトレース

経緯

Monaは最近(2010年5月現在)ぬるぽで「ガッ」てなってもプロセスを殺さなくなりました。

そろそろgdbの季節だとは思うのですが、その作業はちょっと自分でやる気は起こらない。

目的

スタックトレースの表示がそろそろ欲しい。

デバッグ技法/落ちた場所を特定するでは、最後に落ちた場所は分かるのですが、それがどこから呼ばれているのか分かりません。
これでは大規模な物を作るのはちょっと厳しい。

gdbサポートがなったあかつきにはサックリ捨てられるように手は抜いて、でもカーネルに入れるので挙動自体はきっちりと、という方針でいきます。

mapファイルのパース回りは将来プロファイラが必要なフェーズまでMonaが進んだ時にしばらくは使えるように、という意識を(一応)しています。

概要

以下のようなAPIを考えています。
 extern bool syscall_stack_trace_enable(uint32_t pid, const char* map_file_path);
 extern void syscall_stack_trace_disable(uint32_t pid);

enableが呼ばれるとカーネル側でマップファイルをパースしたデータ構造を持ち、落ちた時にそのデータ構造から名前をひっぱって表示して終了します。
この時、勝手にデータ構造は解放します。

正常終了時には解放しないので、手でsycall_stack_trace_disableを呼んでやる必要があります。

存在しないpidへのdisable呼び出しは単純に無視されます。

一応別プロセス(シェルとか)からenableするようなユースケースも考えて、pidを指定するようになっています。

なお、使用する時はbin下にmapファイルをいちいち入れるのも面倒なので、FileReceiverを使って/MEM下においてそこをmainの先頭でハードコードしてやるのが現時点の実用上は楽です。

アクション

本家へのマージ

議論

使ってみると意外と便利なので、むしろデフォルトでONにしてしまおうか、という気もしています。
マップファイルを指定しないとアドレスの一覧を出すだけで。

外のモジュールとかもおっかける気があるなら案2が便利か、とも思いますが、一方でFileReceiverでRamDiskにmapファイルを送り込んでenableすればいいだけなので、再現が簡単に出来る状況なら現状でもあまり困りはしません。

関連ページ

マージ作業の為の備忘録。branchは切りませんでした(すみません…)

http://github.com/mumurik/mona/commit/380990f947dcd180be42fa83e8a40d46b4e8c849
http://github.com/mumurik/mona/commit/e1f17f29cd7c8af12ce6a73d5c1f04d371f59353
http://github.com/mumurik/mona/commit/fe51adc00e073050ed7acbb97f4bdd692fa403b3
http://github.com/mumurik/mona/commit/c4d10e2e754cafe7f9b11aafcd298532c0bfeed0
http://github.com/mumurik/mona/commit/aa68f60fa5b43b90c1642598c4c93e69b62aa536
http://github.com/mumurik/mona/commit/eb9b7606dcb5748a1247b1067d89e9f454494f81
http://github.com/mumurik/mona/commit/7e187a834d7e492666cdb8da54b1e0ec2f370ba0
http://github.com/mumurik/mona/commit/450b3e0088659e3c1ebf699f9d8c1cf39be1e789
http://github.com/mumurik/mona/commit/5d862ee1c6f08ce7568f1a2902aec225eacad19a

コメント

コメントはありません。 コメント/議論/スタックトレース?

お名前:

MENU

now: 8

リンク


最新の20件
2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-12-09 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 1249, today: 2, yesterday: 0

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2010-05-21 (金) 20:26:11 (2896d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.074 sec.