StackTrace из Exception в другой ветке? - PullRequest
1 голос
/ 11 сентября 2009

В StackTrace есть конструктор, который принимает исключение в качестве аргумента. Все хорошо, но я заметил, что все другие конструкторы говорят, что он получит StackTrace из текущего потока, но конструктор, принимающий исключение, ничего не говорит об этом, кроме

Полученная трассировка стека описывает стек во время исключение.

Я просто хочу быть уверен, что получу правильный StackTrace исключения, даже если я создаю StackTrace в другом потоке, в котором было создано исключение, когда я создаю StackTrace из исключения в другом потоке.

Может кто-нибудь подтвердить?

Ответы [ 2 ]

1 голос
/ 11 сентября 2009

Кажется, достаточно просто попробовать, если я что-то упустил. Это напечатает правильный след стека для меня.

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;
    }
}
1 голос
/ 11 сентября 2009

Он создаст StackTrace для вызываемого потока (внутренне он вызывает CaptureStackTrace с параметром targetThread, который указывает на запрос текущего потока). Единственный ctor, который создает для другого потока, это тот, который принимает экземпляр Thread.

...