2013-04-16 14 views
9

このコード:例外を元に戻してスタックトレースを保持するにはどうすればよいですか?

try { 
    try { 
    throw 1; 
    } catch (e, s) { 
    print("$e $s"); 
    throw e; 
    } 
} catch (e2, s2) { 
    print("$e2 $s2");  
} 

プリント:

1 #0  main (file:///.../test.dart:34:7) 

1 #0  main (file:///.../test.dart:37:7) 

ように、元のスタックトレースが完全に失われます。スタックトレースを残して再スローする方法はありますか?

+0

をあなただけ 'rethrow'た場合はどうなりますか? – Ladicek

+0

@ Ladicek、Dartには 'rethrow'というキーワードがありますか?オンラインの証拠を見つけることができず、私のダーツのインストールはそれを理解していません。 –

+0

@DarshanComputing仕様の第12.8.1章を参照してください。 – Ladicek

答えて

9

現在のダートVMのバージョンとdart2jsサポート再スロー、rethrowで、スタックトレースを保存:

void main() { 
    try { 
    try { 
     throw 1; 
    } catch (e, s) { 
     print("$e $s"); 
     rethrow; 
    } 
    } catch (e2, s2) { 
    print("$e2 $s2");  
    } 
} 

これが生成します。

 
1 #0  main (file:///home/darshan/so/stacktrace.dart:4:7) 

1 #0  main (file:///home/darshan/so/stacktrace.dart:4:7) 
#1  main (file:///home/darshan/so/stacktrace.dart:7:7) 
+0

素晴らしい、ありがとうDarshan! –

+0

違いは、あなたはちょうど 'スロー'と@ジャスティン・ファーガニが 'スロー・イズ 'をしているということですか? – Jasper

+0

@ジャスパーはい、 'throw e;'は普通のスローですが 'throw 'は' rethrow; 'を書く現在の方法です。 –

関連する問題