В 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 *.