2009-04-27 18 views
1

私はソースコードを持っている実行中のプログラムを監視する方法を探しています。基本的に、ユーザーがそれを実行するとき、私はどの関数とパラメーターが連続して呼び出されるのかを知る必要があります。Visual Studioのトレースポイントをプログラムで追加する方法は?

これを実現するために、すべての関数にトレース出力コードを書き込むことができます。しかし、私はソースコードを変更することはできません。 Visual Studio 2005のTracepointでソースを変更せずにログ情報を出力できることがわかりました。しかし、私はそれらをすべての機能に追加する必要があります。

私は何千ものファイルと関数を持っているので、プログラムでこれを行う方法を見つける必要があります。ブレークポイントを追加できるDTE.Debugger.Breakpoints.Addについて知りました。しかし、私はトレースポイントのための方法を見つけることができませんでした。または、プロジェクトのブレークポイント情報はどこに保存されていますか?私はslnまたはvcprojでそれを見つけることができませんでした。またはブレークポイントをプログラムでトレースポイントに変換する方法はありますか?私は、 "ヒット時"のプロパティダイアログを変更して手動で変更することができます。

ありがとうございます!

答えて

0

また、アスペクト指向コーディングを見ることもできます。私の理解では、これは属性によって制御されるコンパイルされたアセンブリを変更し、通常はすべてのメソッド/プロパティにトレースを追加するために使用されます。

How can I add a Trace() to every method call in C#?

+0

私はAspectC++を読んでいますが、私はC++コードで作業しています。引数値にもアクセスできます。それは私の目的をうまく果たすはずです。 皆さん、ありがとうございました。 – Darren

1

.NETプロファイラを使用すると、どのメソッドが実行され、どれくらいの時間がかかるかをソースコードを変更せずに確認できます。基本的には、コンパイルされたアセンブリに特殊コードを挿入します。

+0

パフォーマンスまたはメモリプロファイラを意味しますか?私はコードカバレッジチェッカーを使うことも考えました。しかし、私は関数のパラメータ/変数の値も知っている必要があります。プロファイラはこれらの情報をログに記録できないと思いますか?関数呼び出しの順番も知っておく必要があります。関数は最初に呼び出されます。トレースポイントを使って、私はこれらを知ることができます。 – Darren

+0

私が現在使用しているパフォーマンスプロファイラ(EQUATECから)を使用すると、呼び出された順に特定のメソッドにドリルダウンできます。各メソッドに渡されたパラメータを見るためには、わかりません。私は本当にそのようなものの必要性を持っていませんでした。申し訳ありませんが、私はもっと助けになることはできませんでした。 –

0

溶液の最初の部分:

DTE.ExecuteCommand( "EditorContextMenus.CodeWindow.Breakpoint.InsertTracepoint")

これは、カーソルがあった行のためのTPウィンドウを開きます。ただし、[OK]を選択するにはまだReturnキーを押す必要があります。私のニーズには十分です。少なくとも、あなたは右クリックなどする必要はありません。

0

私はこれが解決策だと思います...このマクロは、プログラムのMainメソッドをブレークポイントとして追加し、すべてのブレークポイントトレースポイントに。

Sub AddBreakpointToMain() 
    Dim bp As EnvDTE80.Breakpoint2 
    Dim bps As EnvDTE.Breakpoints 


    bps = DTE.Debugger.Breakpoints.Add("Main") 
    For Each bp In bps 
     bp.Tag = "SetByMacro" 
     bp.BreakWhenHit = False 
     bp.Message = "Hi, this is your tracepoint calling." 
    Next 
End Sub 
4

ブレークポイントをEnvDTE80.Breakpoint2にキャストする必要があります。次に使用できるようになります

breakpoint.BreakWhenHit = false; 
breakpoint.Macro = "YourMacro"; 
関連する問題