来自Exception的StackTrace在不同的线程上?

时间:2009-09-11 06:41:30

标签: .net exception multithreading stack-trace

StackTrace上有一个构造函数,它将一个exeption作为参数。一切都很好,但我注意到所有其他构造函数都表示它将从当前线程获取StackTrace,但是获取异常的构造函数除了

之外没有说明任何内容。
  

生成的堆栈跟踪描述   当时的堆栈   异常。

我只是想确保我将获得正确的异常StackTrace,即使我在不​​同的线程上创建StackTrace,当我从另一个线程中的异常创建StackTrace时创建异常。

有人可以确认一下吗?

2 个答案:

答案 0 :(得分:1)

它将为其调用的线程创建StackTrace(在内部,它为参数'targetThread'调用'CaptureStackTrace',表示请求当前线程)。为另一个线程创建的唯一ctor是获取Thread实例的那个。

答案 1 :(得分:1)

似乎很容易尝试,除非我遗漏了什么。这为我打印了正确的堆栈跟踪。

static Exception threadEx;

static void Main()
{
    Thread worker = new Thread(DoWork);
    worker.Start();
    worker.Join();

    if (threadEx != null) {
        StackTrace trace = new StackTrace(threadEx);
        Console.WriteLine(trace);
    }
}

static void DoWork()
{
    try {
        throw new Exception("Boom!");
    }
    catch (Exception ex) {
        threadEx = ex;
    }
}