2016-12-15 9 views
0

Похоже, lldb может использовать только frame variable для интроспекции переменной с информацией об отладке или в начале вызова метода.Показывать стек кадра, когда рамка не на вершине больше всего?

Но иногда наш код будет разбит на какую-либо систему или третью библиотеку, мы можем захотеть проанализировать переменную или стек. Я нахожу решение для этого, Disassemble кадра, читать сборку кода и интроспекцию стека вручную.

Но я не могу найти быстрый способ получить стек фрейма, когда он не находится на самом верху. Любой простой способ сделать это в lldb или в Xcode.


Я нашел project in github утверждал, что может сбросить все стековой памяти. Могу ли я использовать некоторую команду lldb для вывода памяти стека из вызова метода?

+0

Не уверен, что вы подразумеваете под «сегментом стека кадра». –

+0

Это просто адрес стека, созданный вызовом метода. @JimIngham – Karl

ответ

0

Это звучит для меня, как и Python API, чтобы lldb будет лучше всего подходит для вида исследования вы хотите сделать:

http://lldb.llvm.org/python_reference/index.html

Вы хотите CFA, то, что вы можете получить от API Python с SBStackFrame.GetCFA(). CFA (адрес кадра вызова) будет адресом кадра стека, когда функция была введена. Оттуда к CFA следующего младшего фрейма используется память стека, используемая этим фреймом.

Вы можете использовать SBProcess.ReadMemory для доступа к памяти.

+0

Спасибо за ваш ответ. Почему lldb просто добавляет это как команду? – Karl

+0

Нет причин, кроме ресурсов. Это не все, что нужно делать; это первый запрос, который я услышал для этого как команду. Если вы напишите запрос на улучшение в репортере ошибок lldb.llvm.org, кто-то доберется до него, когда у них будет время. Но одна из мотивов для LLDB Python API заключалась в том, что вы могли добавить такую ​​функцию без необходимости ждать ресурсов разработчиков lldb. –