英語版
このページの英語版を見る

core.internal.backtrace.dwarf

DWARFを使用してPOSIXターゲット上で人間が読めるスタックトレースを生成する
スタックトレースを表示する一般的なユースケースは、toString が呼び出されたときである。 Throwable が呼び出された場合である(object.d を参照)。スタック・トレースを表示する一般的な使用例は、 が呼び出されたときである。 core.runtime : defaultTraceHandler を繰り返し実行する。 defaultTraceHandler によって返されたクラスが、最終的にこのモジュールを呼び出すことになる。 core.internal.traits : externDFunc を使って、このモジュールに呼び出されることになる。
このモジュールのエントリー・ポイントはtraceHandlerOpApplyImpl 、 であり、唯一の「パブリック」シンボルである(rt のシンボルはすべてプライベートであるため)。 将来的には、この実装をイディオムにすべきだろう、 将来的には、この実装はおそらくイディオムになるはずで、たとえば属性を扱うことができるようになる。

回復力 このモジュールは診断のために使われるので、可能な限り優雅に失敗を処理すべきである。 可能な限り優雅に処理しなければならない。デバッグしようとしている を表示させることは、非常にひどいUXである。 このため、このモジュールは「ベストエフォート」ベースで動作し、以下のようになる。 を表示することもある。 を表示することもある。

データのソース このモジュールは、人間が読めるデータを生成するために、主に2つのソースを使う。 まず、backtrace_symbols を使って、アドレスに関連するシンボル(関数やメソッド)の名前を取得する。 (関数やメソッド)の名前を取得する。 名前はマングルされているので、core.demangle 、 このためにDWARF情報を使用する必要はない、 しかし、将来の拡張では、コールフレーム情報を使用することができる。 (DWARF4「6.4 コールフレーム情報」PDFページ126参照)。

使用される他のデータは、DWARF.debug_line セクションである、 セクションである。 これは、命令アドレスとその(ファイル、行)情報を関連付けるために必要である。
デバッグ行の情報は非常に大きいため、以下のようにエンコードされる。 プログラムを使ってエンコードされる。 詳細はrunStateMachinereadLineNumberProgram を参照のこと。

DWARFバージョン このモジュールはDWARF 3、4、5のみをサポートしている。

Authors:
Yazan Dabain, Sean Kelly