Как создать пользовательский визуализатор отладки в Clion для сложного контейнера?C++

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

Сообщение Anonymous »

Недавно я сделал пользовательский контейнер, в котором хранится несколько массивов типов в одном блоке смежного памяти с Механизм на заказ вместо SOA или AOS.
Проблема заключается в том, что все стандартные визугалисты, которые я использую, не могут правильно отобразить мой контейнер из -за его нетрадиционной компоновки памяти. Итераторы моего контейнера, поиск элементов и управление памятью настолько нестандартны, что отладчики просто не могут проанализировать свою внутреннюю структуру.
Эта визуализация такова, что вы можете понять, как внутренние работы без необходимости читать большую часть деталей реализации. < /p>
макет памяти < /h6>
block < /h6>

Код: Выделить всё

   +--------------------------------+
|  int[]  |  float[]  |  char[]  |
+--------------------------------+
^         ^           ^
|       offset 1      |
|                     |
|                  offset 2
base

< /code>
 logical < /h6>
    [int1][float1][char1]
[int2][float2][char2]
[int3][float3][char3]
Контейнер, один раз выделяет кортеж, а затем вызовет init_arrays () , чтобы создать большую каплей с одной памятью и управлять смещениями с помощью арифметики указателя.
std::tuple arrays = {}; /* single allocation */

void init_arrays(const char *data)
{
size_t offset = 0;
([&](std::index_sequence)
{
((std::get(arrays) = reinterpret_cast(
const_cast(data) + offset), /* single memory blob*/
offset += cap * sizeof(...)), ...);
})(std::make_index_sequence {});
}

/* at a given index, reconstruct tuple elements */
value_type get_element(size_type index) const noexcept
{
return std::apply([&](auto *... ptrs)
{
return std::make_tuple(ptrs[index]...);
}, arrays);
}
< /code>
воспроизведения < /h4>
просто скопируйте фрагмент вместе с реализацией контейнера и осмотрите таким образом, что позволяет вам видеть визуализацию отладки в соответствии с вашей собственной IDE. < /P>
также отметьте, что контейнер удовлетворяет требованиям C ++ STL < /p>
#include

int main()
{
StrideArray strd_arr = {};
strd_arr.push_back(0, 3.14, 'a'); /* [0]: 0, [1]: 3.14, [2]: 'a' */
strd_arr.get(0); /* get index 0 of array 1 */
strd_arr.size(); /* size */
strd_arr.capacity(); /* capacity */

/* please refer to the implementation for API reference */
return 0;
}
< /code>
Я прочитал несколько постов и статей о симпатичных принтерах LLDB и методах расширения отладчиков, а также о старых сообщениях Stackoverflow, но для Clion, в частности, почти нет воспроизводимой документации. Я также попытался создать основные симпатичные принтеры на основе Python, похожие на подходы GDB, но они не отображались достаточно хорошо для среды Клиона. Визуализатор отладки, который может проанализировать этот вид макета памяти и правильно отображать размер, емкость и элементы контейнера, а также обрабатывать гетерогенную природу контейнера. Стоит также знать, что реализация использует расширение пакета параметров шаблона, создание динамического массива на основе кортежей и поиск пользовательских элементов. читается во время отладки, предпочтительно с решением, которое работает непосредственно в интерфейсе Клиона. Параллельные массивы разных типов с минимальными накладными расходами на память, как аст. "


Подробнее здесь: https://stackoverflow.com/questions/794 ... -container
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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