TangoのStacktrace


投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/4/25 1:53
SHOO  管理人   投稿数: 658
Tangoのリポジトリで最新のtrunkにはStackTraceが含まれています。
ちょっと試してみたので報告をば。

#code(d,title=main.d){{{
debug import tango.core.stacktrace.TraceExceptions;
import tango.util.log.Trace;
import tango.core.Thread;
void func()
{
throw new Exception("exception occered!", __FILE__, __LINE__);
}

void threadRoot()
{
func();
}

void main()
{
try
{
auto t = new Thread(&threadRoot);
t.start;
t.join;
}
catch(Exception e)
{
e.writeOut((char[] s) { Trace.format(s); });
Trace.flush();
}
}
}}}

以下が出力

#code(console){{{
$ dmd -g -debug -run main
object.Exception@main.d(6): exception occered!
----------------
tango.core.stacktrace.WinStackTrace.winAddrBacktrace@0+25833 :0 0+0 [4085dd]
tango.core.stacktrace.StackTrace.defaultAddrBacktrace@0+18729 :0 0+0 [406a1d]
_rt_createTraceContext@0+0 object_.d:1103 0+0 [4119e5]
object.Exception._ctor@0+23 object_.d:1025 0+0 [4117ae]
main.func@0+47 main.d:6 0+0 [402043]
main.threadRoot@0+0 main.d:11 0+0 [402053]
tango.core.Thread.Thread.run@0+9 core\Thread.d:1251 0+0 [41390a]
_thread_entryPoint@4@0+3 core\Thread.d:115 0+0 [412d99]
___threadstartex@4@0+8475 :0 0+0 [422faa]
???@0+1995227484 :0 0+0 [772ecfeb]
???@0+1995228011 :0 0+0 [772ed1fa]
}}}

マルチスレッドでもちゃんとスタックトレースできるようです。
ちょっと読みにくい…かな?
現在はたぶんWin版だけ。しかもVista64bitではそのままでは動かない。
dbghelp.dllのバージョンが5.1.2600.0だと動作するようです。
64bit版だからか分かりませんが、6.0.6001.18000はC:\Windows\SysWOW64に入っているものも、C:\Windows\System32に入っているものも動作しないようでした。
実行ファイルと同じフォルダに5.1.2600.0のdbghelp.dllを一緒に入れておくとうまく動くようです。
投票数:210 平均点:5.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/4/25 13:35
tama  一人前   投稿数: 111
rt_createTraceContextということは,ランタイムに組み込まれたってことですかね.これだとPhobosの方にもいずれ組み込まれるかも?(プラットフォームサポートが少ないのでまだ先だと思いますが)
投票数:190 平均点:4.53
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文

  条件検索へ


メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu