2009-03-10 7 views
3

C/C++でプログラムを作成したときに、ポインタ値をトレースに含めることがよくあります。これにより、トレースメッセージ間のオブジェクトの関連付けが容易になりました。 C#では、私はトレースできるポインタ値がありません。トレース可能なオブジェクトIDの良い選択肢はありますか?C#のポインタを使ったデバッグ

基本的なメモリアドレスを取得する方法はわかりませんが、GCを使用してオブジェクトを移動させることはできません。

答えて

2

コンストラクタコールごとにインクリメントされるクラス変数を追加します。このクラス変数を独自のインデックスとしてクラスに割り当てます。

class foo 
{ 
    private static int counter; 
    private int instance_counter; 

    public Foo() 
    { 
    instance_counter = counter; 
    counter++; 
    } 

    public string toString() 
    { 
    return "Foo "+instance_counter.toString(); 
    } 
} 

はコンパイルされていない可能性があります。ここにはコンパイラはありません。

+0

それは実際にはないのtoStringをToStringメソッドだ、とあなたは公共オーバーライド公共の文字列のToString()それが動作すること以外に言う必要があります。しかし、かなり厄介なようです。 –

2

Object.GetHashCode()を使用します。 GetHashCode()メソッドは、C#のすべてのクラスがObjectから派生するため、すべてのオブジェクトからアクセスできます。しかし、Object.GetHashCode()が呼び出され、その結果が何らかの方法でユーザー定義クラスのハッシュコードの生成に使用された場合にのみ、一意であることが保証されています。これは絶対的な保証ではないことに注意してください。複数のオブジェクトに対して同じHashcodeを取得することになります。

関連する問題