Пустые переменные lldb.frame в отладчике Xcode lldb при использовании скриптов Python - PullRequest
0 голосов
/ 16 ноября 2018

В настоящее время я работаю над командой построения для пользовательских объектов в C ++.Я использую Xcode v10.1.

Я импортирую свои собственные команды с помощью command script import test.py , где есть следующая функция:

import lldb

def test_function(debugger, command, result, dict):
        obj = lldb.frame.FindVariable("custom_object")
        print(obj)

def __lldb_init_module (debugger, dict):
  debugger.HandleCommand('command script add -f test.test_function test')

Где пользовательский объект - это объект, который я хочу использовать в скрипте Python.

Если я только что открыл отладчик, я получаю ошибку:

obj = lldb.frame.FindVariable("custom_object")
AttributeError: 'NoneType' object has no attribute 'FindVariable'

Однако, когда яоткройте встроенный интерпретатор Python в XCode напрямую и выполните ту же строку кода, что и выше, я не получаю ошибки.

Если я теперь снова выполню свою пользовательскую команду, она будет успешно выполнена для всех объектов в той же области действия отладчика.

1 Ответ

0 голосов
/ 26 ноября 2018

lldb.frame не определено в командах на основе Python lldb - поэтому оно NoneType.lldb.{process, thread,frame} просто для удобства в интерактивном интерпретаторе сценариев.Но для команды не имеет смысла - которая может быть запущена с помощью ловушки остановки, команды точки останова и т. Д. Полагаться на какое-то глобальное состояние для своего процесса и потока.В конце концов, вы можете иметь два потока, одновременно работающих с одной и той же точкой останова.Так что не существует уникального lldb.thread.

Лучше использовать версию командной функции, которая принимает SBExecutionContext в качестве третьего аргумента (это описано в http://lldb.llvm.org/python-reference.html) и получитьпоток и кадр из этого аргумента.

...