Какие инструменты вы используете при отладке сохранения/загрузки файлов собственного формата?
Каждый раз мучаюсь, когда приходится писать код сохранения/загрузки файлов собственного (бинарного) формата. Файлы могут иметь довольно сложную структуру, с указанием локальных и глобальных смещений, иногда со сжатием стандартными алгоритмами отдельных блоков внутри файла. После написания кода сохранения файла есть необходимость «протрассировать» само содержимое файла, что оно соответствует ожиданиям.
Может быть есть какой-то удобный инструмент и/или редактор, в котором я смог бы перемещаться в файле по смещениям (по глобальному смещению, а также локально (от текущего места), вперед и назад на заданное число байт). Также есть необходимость выдирать отдельные куски данных из середины файла в другой файл, просматривать файл как в чисто бинарном виде, так и, например, в виде списка 4-х байтных, 8-байтных значений или структур заранее описанного типа? Этакий очень навороченный, современный, мощный hex-редактор?
А что вынуждает использовать сложные собственные бинарные форматы? Есть protobuf, обеспечивающий возможность кроссплатформенного чтения полученныз записей и возможность добавления новых полей без потери бинарной совместимости. Еще есть bson.
Или нужна сверхэффективность и возможность загрузить данные как есть в память, скастить указатель и пользоваться уже загруженным классом?
Не всегда в файле хранятся именно какие-то «записи». Иногда это довольно сложные структуры бинарных данных. Последние два самодельных формата, с которыми я работал — это файл специализированного полнотекстового индекса сотен тысяч документов (да, там нужна сверхэффективность) и файлы хранения дифференциальной/инкрементной истории изменений документов (примерно то, что хранит SVN или Git у себя на сервере). Объектного представления данных из этих файлов как бы и нет, при работе используются относительно низкоуровневые алгоритмы.
Может быть, просто тесты писать — написать развесистый пример со всеми возможными вариантами и тестовый код, чтобы посмотреть, как читается? Из инструментов на Питоне, например, есть такой construct, декларативный парсер для бинарных форматов, мне кажется, с ним тестировать должно быть удобно (хотя и с обычным struct можно легко написать специализированные тесты).
В целом же я присоединяюсь к предыдущему оратору — почему не использовать стандартный сериализатор?
Ещё один редактор с шаблонами форматов файлов. HexEdit. Бесплатный. (Есть и pro-версия, но я не нашёл, чем она отличается.)
Интерфейс — привет из 90х. Юзабилити оставляет желать лучшего. Но по крайней мере фич больше, чем в других бесплатных редакторах.
Есть подозрение, что работа с шаблонами очень бажная, но, возможно, я не во всём разобрался ещё.