StackTrace上有一个构造函数,它将一个exeption作为参数。一切都很好,但我注意到所有其他构造函数都表示它将从当前线程获取StackTrace,但是获取异常的构造函数除了
之外没有说明任何内容。生成的堆栈跟踪描述 当时的堆栈 异常。
我只是想确保我将获得正确的异常StackTrace,即使我在不同的线程上创建StackTrace,当我从另一个线程中的异常创建StackTrace时创建异常。
有人可以确认一下吗?
答案 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;
}
}