Можно ли проверить стек вызовов приостановленного волокна? - PullRequest
0 голосов
/ 16 января 2020

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

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

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

1 Ответ

0 голосов
/ 16 января 2020

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

попытаться объяснить.

с учетом дескриптора волокна?

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

...