中の技術日誌
 ホーム / 上へ

プログラム途中で呼び出し履歴、スタックトレースをとる方法

2005/07/18

この文書はVisual Studio 2003.NET製品版時点をベースに記述されています。

プログラム途中で呼び出し履歴、スタックトレースをとる方法

System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
for( int StackLoop = 0; StackLoop < st.FrameCount; StackLoop++)
{
  System.Diagnostics.StackFrame sf = st.GetFrame(StackLoop);
  System.Reflection.MethodBase mb = sf.GetMethod();
  System.Diagnostics.Debug.WriteLine( sf.ToString() );
}

このようにStackTraceクラスを利用すれば取得することが可能です。

上記の出力例

Void XXXリストボックス_SelectedIndexChanged(System.Object, System.EventArgs)
Void OnSelectedIndexChanged(System.EventArgs)
Void set_SelectedIndex(Int32)
Void RefreshItems()
Void OnDataSourceChanged(System.EventArgs)
Void SetDataConnection(System.Object, System.Windows.Forms.BindingMemberInfo, Boolean)
Void set_DataSource(System.Object)
Void XXXデータグリッド_Paint(System.Object, System.Windows.Forms.PaintEventArgs)
Void OnPaint(System.Windows.Forms.PaintEventArgs)
Void OnPaint(System.Windows.Forms.PaintEventArgs)
Void PaintWithErrorHandling(System.Windows.Forms.PaintEventArgs, Int16, Boolean)
Void WmPaint(System.Windows.Forms.Message ByRef)
Void WndProc(System.Windows.Forms.Message ByRef)
Void OnMessage(System.Windows.Forms.Message ByRef)
Void WndProc(System.Windows.Forms.Message ByRef)
IntPtr DebuggableCallback(IntPtr, Int32, IntPtr, IntPtr)
IntPtr DispatchMessageW(MSG ByRef)
Boolean System.Windows.Forms.UnsafeNativeMethods+IMsoComponentManager.FPushMessageLoop(Int32, Int32, Int32)
Void RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)
Void RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)
Void RunDialog(System.Windows.Forms.Form)
System.Windows.Forms.DialogResult ShowDialog(System.Windows.Forms.IWin32Window)
System.Windows.Forms.DialogResult ShowDialog()
Void XXXの取り込みボタン_Click(System.Object, System.EventArgs)
Void OnClick(System.EventArgs)
Void OnClick(System.EventArgs)
Void PerformClick()
Boolean ProcessMnemonic(Char)
Boolean _ProcessMnemonic(Char)
Boolean ProcessMnemonic(Char)
Boolean ProcessDialogChar(Char)
Boolean ProcessDialogChar(Char)
Boolean ProcessDialogChar(Char)
Boolean PreProcessMessage(System.Windows.Forms.Message ByRef)
Boolean System.Windows.Forms.UnsafeNativeMethods+IMsoComponent.FPreTranslateMessage(MSG ByRef)
Boolean System.Windows.Forms.UnsafeNativeMethods+IMsoComponentManager.FPushMessageLoop(Int32, Int32, Int32)
Void RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)
Void RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)
Void Run(System.Windows.Forms.Form)
Void Main()

例外のスタックトレースとは表示している内容が違います。

このあたりは編集をこまごまとすることにより可能です。いろいろやってみてください。

デバッグビルド時にしか取得はできませんので、注意してください。


勉強会: 01/12 大阪#5, 02/03 東京#4 , 02/10 大阪#6 登録受付中

中の技術日誌
コンテンツ
わんくま同盟
わんくま同盟
わんくま同盟
広告
バナー
MVP LOGO
MSMVP Visual C# Since 2004/04-2007/03
MCP LOGO
070-316
姉妹サイト
姉妹サイト:じゃんぬのC#, VB.NET 入門
じゃんぬの
C#, VB.NET 入門
検索
Google

ブログ本家
広告