Может ли Visual Studio (или любой другой инструмент) интерпретировать адрес как начало стека вызовов (повышающий контекст)?

Можно ли сказать Visual Studio (или любому другому инструменту даже в любой другой основной операционной системе) интерпретировать адрес как начало стека вызовов?


Чего я пытаюсь достичь: у нас есть библиотека, которая использует boost«s make_fcontext / jump_fcontext и сохраняет эти контексты в контейнере, чтобы приостановить некоторые вызовы для последующей обработки.

Мой вопрос — можно ли как-то отладить, что это за приостановленные вызовы? Я представляю, что я могу сказать отладчику / инструменту что-то вроде: «Вот этот адрес, хотя он и не очевиден, он фактически указывает на стек вызовов,« анализирует »его и показывает мне как стандартный стек вызовов».

Не знаю, теоретически ли это возможно, так как я не знаю boost::context в деталях, но это звучит достижимо.

Кто-нибудь пытался с этим справиться?

4

Решение

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

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

  • Вы можете использовать boost::context::fiber вместо fcontext_t, В Windows они могут быть реализованы с волокнами win32, поэтому они будут автоматически отображаться в IDE с полным стеком / локальными компьютерами. (Возможно, вам придется изменить конфигурацию Boost, чтобы заставить это работать, подробности см. В документации.)

  • Вы можете заглянуть внутрь fcontext_t struct, получите EIP и ESP и скопируйте их в свои регистры; в этот момент процессор подумает, что он работает как оптоволокно. (Скорее всего, это НЕ будет работать очень хорошо.)

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]