Пользовательский визуализатор отладки LLDB для типов QtC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Пользовательский визуализатор отладки LLDB для типов Qt

Сообщение Anonymous »


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

класс qJsonArray_SyntheticProvider: def __init__(self, valobj, Internal_dict): self.valobj = валобж защита num_children(self): пытаться: s = self.valobj.EvaluateExpression("size()").GetValueAsUnsigned(0) вернуть с кроме: вернуть 0; защита get_child_index(сам,имя): пытаться: return int(name.lstrip('[').rstrip(']')) кроме: возврат Нет защита get_child_at_index(сам,индекс): если индекс < 0: возврат Нет если индекс >= self.num_children(): возврат Нет если не self.valobj.IsValid(): возврат Нет пытаться: element_type = self.valobj.EvaluateExpression("at(%d).type()" % index).GetValueAsUnsigned(0) если тип_элемента == 1: element = self.valobj.EvaluateExpression("at(%d).toBool(false)" % index) элиф element_type == 2: element = self.valobj.EvaluateExpression("at(%d).toDouble(0)" % index) элиф element_type == 3: element = self.valobj.EvaluateExpression("at(%d).toString()" % index) элиф element_type == 4: # не работает -> тип массива element = self.valobj.EvaluateExpression("at(%d).toArray()" % index) элиф element_type == 5: # не работает -> тип объекта element = self.valobj.EvaluateExpression("at(%d).toObject()" % index) еще: возврат Нет возврат (self.valobj .CreateValueFromData("[%d]" % индекс, element.GetData(), element.GetType())) кроме: возврат Нет пример кода на C++:

QJsonArray arr; arr.push_back(1); arr.push_back("тест"); QJsonArraynested_arr; вложенный_arr.push_back(3); arr.push_back(nested_arr); Есть ли более простой способ сделать это? Я не уверен, что EvaluateExpression — правильный переход, но я не знаю, как получить данные другим способом.

Результат (обратите внимание, что третий элемент отображается как пустой массив):
Изображение


пс. это также происходит с пользовательскими типами (не Qt), у которых нет поля, а есть только свойство getSomething().

редактировать: это поставщик сводных данных:
def qjsonarray_summary(значение, не используется): num_elements = value.EvaluateExpression("size()").GetValueAsUnsigned(0) return "(%d elements)" % num_elements
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»