Довольно принтер для VS: файл Natvis для пользовательских строк
У меня есть небольшая строка оптимизированной строки, которая определена на x86-64 как:
class String {
private:
struct LargeString {
char* data;
std::size_t size;
std::size_t capacity;
};
union {
char small_[sizeof(LargeString)];
LargeString large_;
}
}
Если длина строки меньше 22 байт, она содержится в small_
в стеке, и если он больше, он содержится в large_.data
в кучу. Как мы на x86-64, sizeof(LargeString)
24. Способ узнать, является ли строка маленькой или большой, следующий:
истолковывать small_[23]
как неподписанный символ Если старший бит равен 1, у нас есть большая строка. В противном случае строка мала. В случае, если строка мала, мы должны обнулить 3 старших бита (там есть некоторая информация) и таким образом получить ее размер.
Строки в большинстве случаев кодируются в UTF-8, но могут быть массивом байтов (в этом случае мне все равно, если визуализатор печатает мусор).
Есть ли способ написать natvis
файл для просмотра такой строки? Если нет, есть ли другое решение, например, написать что-то в C#
,