3

Visual Studio でコードをデバッグするときに、プロパティにカーソルを合わせると、そのプロパティの本体が実行されます。そのコードが実行されている場合、通常のコード実行ではなく、デバッガーによって実行されていると判断できますか?

明確にするために、Debugger.IsAttached を探しているわけではありません。「Debugger.IsPaused」という名前の何かを探しています。そのようなものは存在しますか?

CurrentThread を見ると、「Debugger Thread」という名前が付けられている、意味のある ManagedThreadID があるなど、何かが明らかになることを期待していましたが、スレッドには名前がなく、マネージド スレッド ID は特別ではありません。

4

1 に答える 1

2

基本的にコードが実行されていないため、デバッガーでプロセスが停止しているかどうかを確認することはできません。

デバッガー (Visual Studio) での式の値の評価の特殊なケースについては、次のことが起こります: プロセスのアクティブなデバッガー スレッドがデバッガーによってハイジャックされ、Visual Studio 式エバリュエーターによって生成されたコードがスレッドによって実行されます。 . 評価が完了すると、スレッドは再び停止し、その状態は評価前のまま変更されません。このプロセスは「関数」と呼ばれます。理論的には、関数内のコール スタック トレースを何らかの方法で分析して、funceval を介して呼び出されているかどうかを調べることができますが、CLR デバッガーのアンマネージドな性質のため、これはほとんど不可能だと思います。

funceval の詳細については、Mike Stall の包括的な CLR デバッグ ブログ ( http://blogs.msdn.com/b/jmstall/archive/category/11475.aspx ) の対応するカテゴリを参照してください。

于 2013-09-04T08:12:01.803 に答える