c# スタックトレースを文字列に変換する方法

CallStackLines で、現在のコールスタックが文字列に変換されます。引数の count には、出力するスタックの個数を指定します。ただし、0 を指定すると、全てのコールスタックが出力されます。

コールスタックを文字列に変換するプログラム

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;

namespace SSS
{
  public class DebugUtil
  {
    public static void AppendCallStack(
      StringBuilder sb, int start, int count, string sep
    )
    {
      StackTrace st = new StackTrace();
      if (count == 0)
      {
        count = st.FrameCount;
      }
      else
      {
        count += start;
        if (count > st.FrameCount)
          count = st.FrameCount;
      }

      for (int i = start; i < count; ++ i)
      {
        if (i > start)
          sb.Append(sep);
        sb.Append(st.GetFrame(i).GetMethod().ReflectedType.FullName);
        sb.Append("::");
        sb.Append(st.GetFrame(i).GetMethod().Name);
      }
    }

    public static string CallStackLines(int count)
    {
      StringBuilder sb = new StringBuilder();
      AppendCallStack(sb, 2, count, "\n");
      return sb.ToString();
    }
  }
}

AppendCallStack の start に 2 を指定しているのは、出力に AppendCallStack と CallStackLines を除くためです。

となりのページ

このサイトについて

このサイトのページへのリンクは自由に行っていただいてかまいません。
このサイトで公開している全ての画像、プログラム、文書の無断転載を禁止します。

連絡先

ここをクリック すると表示されるページから作者へメールで連絡できます。

共有