Можно ли проверить стек вызовов приостановленного волокна?

Visual Studio имеет возможность проверки приостановленных потоков и их стека вызовов. Можно ли проверить стек вызовов приостановленного волокна, учитывая дескриптор волокна?

Цель состоит в том, чтобы получить больше отладочной информации о взвешенных волокнах (и удовлетворить мое любопытство).

Из моих начальных поисков я не ожидаю, что это будет легко (или даже выполнимо). Предложения приветствуются.

Всего 1 ответ


Нет, это невозможно. отладчик не может получить стек для неактивных волокон просто потому, что только само приложение знает, где находятся данные и стек неактивных волокон.

попробуй объяснить.

учитывая ручку волокна?

не существует ручки для волокна. существует дескриптор только для потока. и стек для активного волокна - это то же самое, что и стек потоков. дополнительные волокна (и их стек) выделяются из кучи процесса. Не хранить - где расположены дополнительные данные / стек волокна. Само приложение должно хранить эту информацию. внешние программы, включая отладчики, не могут этого знать. как результат - невозможно показать трассировку стека, если мы даже не знаем, где он находится. отладчик даже не может знать - сколько существует волокон. возможно только просмотр - активны ли волокна (как минимум) в потоке (после вызова ConvertThreadToFiber и до ConvertFiberToThread ). создаются дополнительные волокна, где хранятся данные / стек - уже неизвестно.


Есть идеи?

10000