lldb (Xcode) настраиваемое форматирование для структуры с произвольным длинным буфером char16_t - PullRequest
1 голос
/ 09 мая 2020

В LibreOffice у нас есть тип rtl_uString, который (немного упрощен):

typedef struct
{
    int refCount;
    int length;
    char16_t buffer[1];
} rtl_uString;

Как вы могли догадаться, фактические объекты rtl_uString тогда имеют буферы произвольного размера, как указано в поле длины .

Для этого у нас уже есть сложный продюсер на основе Python. Т.е. установлен с

type summary add --skip-references --python-function LO.rtl_uString_summary rtl_uString

Код Python использует GetPointeeData (), GetUnsignedInt16 () et c. Но, к сожалению, это время от времени вызывает зависания отладчика в Xcode. Поэтому мне пришлось отключить его.

Намного проще просто распечатать буфер, преобразовав его в указатель char16_t, как в

command regex ps 's/(^.*$)/expression -- (char16_t*)(%1).pData->buffer/'

, но набрав ps foo -> mBar et c, конечно, немного болезненно, это должно быть автоматически c, члены и переменные rtl_uString должны выводиться так же, как при использовании специального c средства форматирования.

Итак, мой вопрос: есть ли какой-нибудь простой способ автоматически распечатать значения rtl_uString с использованием такого приведения члена буфера, как в этом регулярном выражении команды , не переходя полностью к провайдеру сводки Python ? Я попытался использовать type summary add --summary-string , но я не могу получить в него преобразование char16_t *.

...