metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2016-07-25 10:18 am

C, магия макросов и отладка

Судя по тому, что я наблюдаю в либах на Си (например, libuv), магия из макросов весьма популярна, в том числе и для реализации разного рода структур данных вроде списков, хэшей (https://troydhanson.github.io/uthash/) и прочего такого.

Вопрос вот в чем - как это нормально отлаживать то? Падает с access violation где-нибудь в кишках макроса на три страницы, отладчик указывает на строку с макросом и единственный способ понять происходящее - медитировать до бесконечности на содержимое переменных, используемых в макросе, потому что кода не видно. Ну или пытаться в уме разложить дизассемблированный код на исходники.

[identity profile] sbj-ss.livejournal.com 2016-07-25 07:23 am (UTC)(link)
Я лично таких либ стараюсь избегать. В той же libxml2 есть человеческая реализация хэшей через функции.
Да и сам не размазываю макросы больше, чем на 3-4 строчки тривиального кода.

[identity profile] metaclass.livejournal.com 2016-07-25 07:30 am (UTC)(link)
Да, вероятно, надо без особой нужды в макросы и интрузивные структуры данных не лезть.
Похоже, у меня тут баг из-за того, что я структуру добавляю в один хэш, не выкинув из другого, что выносит мозги интрузивному хэшу просто напрочь.