Можно ли сказать Visual Studio (или любому другому инструменту даже в любой другой основной операционной системе) интерпретировать адрес как начало стека вызовов?
Чего я пытаюсь достичь: у нас есть библиотека, которая использует boost
«s make_fcontext
/ jump_fcontext
и сохраняет эти контексты в контейнере, чтобы приостановить некоторые вызовы для последующей обработки.
Мой вопрос — можно ли как-то отладить, что это за приостановленные вызовы? Я представляю, что я могу сказать отладчику / инструменту что-то вроде: «Вот этот адрес, хотя он и не очевиден, он фактически указывает на стек вызовов,« анализирует »его и показывает мне как стандартный стек вызовов».
Не знаю, теоретически ли это возможно, так как я не знаю boost::context
в деталях, но это звучит достижимо.
Кто-нибудь пытался с этим справиться?
Есть несколько подходов, которые я могу придумать, с разными вкусами неудовлетворенности.
Вы можете написать свой собственный механизм отладки для подключения к IDE, что позволит вручную перечислять волокна. (Вы, вероятно, не хотите этого делать.)
Вы можете использовать boost::context::fiber
вместо fcontext_t
, В Windows они могут быть реализованы с волокнами win32, поэтому они будут автоматически отображаться в IDE с полным стеком / локальными компьютерами. (Возможно, вам придется изменить конфигурацию Boost, чтобы заставить это работать, подробности см. В документации.)
Вы можете заглянуть внутрь fcontext_t
struct, получите EIP и ESP и скопируйте их в свои регистры; в этот момент процессор подумает, что он работает как оптоволокно. (Скорее всего, это НЕ будет работать очень хорошо.)
Лично я бы пошел со вторым подходом. fcontext_t
Это слишком низкий уровень, чтобы использовать его в любом случае напрямую, если только у вас нет особых экзотических потребностей, о которых вы не упомянули.
Других решений пока нет …