この小さな構造体考えてみましょう:最速の方法は、あなたがする必要がある、スイッチ-r
(あなたがenum
メンバーをリストする必要が再帰)と-v
(冗長を使用して、dt
コマンドを使用することです
struct foo
{
enum enum1
{
enum1_val1_ = 5,
enum1_val2_,
};
enum enum2
{
enum2_val1_ = 0x0001,
enum2_val2_ = 0x0010,
};
enum
{
// assume these come from complicated compile-time expressions
some_class_constant_ = 86,
another_one_ = 99,
};
};
をリストのすべてのenum
秒):
0:000> dt -r -v foo
LangTestingD!foo
struct foo, 3 elements, 0x1 bytes
Enum enum1, 2 total enums
enum1_val1_ = 0n5
enum1_val2_ = 0n6
Enum enum2, 2 total enums
enum2_val1_ = 0n1
enum2_val2_ = 0n16
Enum <unnamed-tag>, 2 total enums
some_class_constant_ = 0n86
another_one_ = 0n99
あなたはそれが各列挙型の値でも無名の1が表示されていることを見ることができます。複数の名前のない列挙型はすべて正しくリストされます。それはそれぞれ1とリストそのメンバーに再帰しようとするすべてのデータメンバー、すべての機能のメンバー、すべての列挙、と:
dt -r -v foo
の問題は、それがfoo
のすべての単一のメンバーをリストしていることです。 foo
が複雑なクラス(継承を取得する方が簡単です)の場合、出力は膨大になり、探している列挙型を見つけるのは難しいでしょう。
ので、次のオプションが具体的には、あなたが望むENUM dt
を伝えることです:
0:000> dt foo::enum1
LangTestingD!foo::enum1
enum1_val1_ = 0n5
enum1_val2_ = 0n6
さて、素晴らしいです!しかし、その名前のないenumについてはどうですか?さて、上記の出力を確認してください。ここでは<unnamed-tag>
が使用されています。多分私たちはそれを使うことができます。
0:000> dt foo::<unnamed-tag>
Couldn't resolve error at 'foo::<unnamed-tag>'
実際には動作しますが、追加のスイッチを2台使用する必要があります。あなたが-n
を組み合わせると(名前の接頭辞として次のパラメータと一致して)、それは、一種の、作品と-y
(次のパラメータは名前です):
0:000> dt -n -y foo::<unnamed-tag>
LangTestingD!foo::<unnamed-tag>
some_class_constant_ = 0n86
しかし、最初の値のみがリストされています。さらに悪いことに、複数の名前のない列挙型がある場合、最初の列挙型の最初の値だけがリストされます。複数の名前のない列挙型はあまり一般的ではないので、これで十分ですが、絶対に必要な場合は、-r -v
を使用して出力で見つけてください。