C, магия макросов и отладка
Судя по тому, что я наблюдаю в либах на Си (например, libuv), магия из макросов весьма популярна, в том числе и для реализации разного рода структур данных вроде списков, хэшей (https://troydhanson.github.io/uthash/) и прочего такого.
Вопрос вот в чем - как это нормально отлаживать то? Падает с access violation где-нибудь в кишках макроса на три страницы, отладчик указывает на строку с макросом и единственный способ понять происходящее - медитировать до бесконечности на содержимое переменных, используемых в макросе, потому что кода не видно. Ну или пытаться в уме разложить дизассемблированный код на исходники.
Вопрос вот в чем - как это нормально отлаживать то? Падает с access violation где-нибудь в кишках макроса на три страницы, отладчик указывает на строку с макросом и единственный способ понять происходящее - медитировать до бесконечности на содержимое переменных, используемых в макросе, потому что кода не видно. Ну или пытаться в уме разложить дизассемблированный код на исходники.
no subject
no subject
Да и сам не размазываю макросы больше, чем на 3-4 строчки тривиального кода.
no subject
Похоже, у меня тут баг из-за того, что я структуру добавляю в один хэш, не выкинув из другого, что выносит мозги интрузивному хэшу просто напрочь.
no subject
Всунуть в макросы отладочную печать.
no subject
А для совсем ада можно развернуть, отладить и попытаться свернуть обратно... В xcode на маке есть соответствующее представление (companion editor/preprocessed file) - но не помню, как при этом ходит по шагам (показывает ли позицию там).
no subject
no subject
http://hipics.ru/images/2016/07/25/Image43bcbe.png
no subject
no subject
коты используют макросы только для свёртки макросов дебажной инфы (строка, файл, функция), ну или для загрузки однотипных тестовых данных в коде
no subject
no subject
no subject
no subject
no subject
no subject
Пару здоровенных проектов с нуля переписывать, похоже, гиблое дело - надо по частям на микросервисы перетаскивать, а там сплошные доисторические винды, фанатики-безопасники и админы с антивирусами, которые winapi и сеть ломают и прочее в том же духе.
Наверно, проще сменить работу было бы, но это не спортивно :)
no subject
no subject
no subject
Насчет же неспортивности, я как-то постепенно пришел к выводу, что мне время моей жизни дороже, чем понты доказывать тормозам, что ты не тормоз. Главное, а смысл? Через 10 лет это все пройдет, а время потрачено. На, в сущности, фигню.
no subject
no subject
no subject
no subject
конечно, все перечисленное, мягко говоря, не идеально, но... сравниваем не с идеалом, а с макросами
no subject
no subject
Но конкретно в случае уже написанного кем-то макроса (увы, мир не идеален, иногда приходится работать с унаследованным или 3rd party кодом) C++ и самая-правильная-среда-разработки мало чем могут помочь. :(
no subject
В случае уже написанного - да, проблема. Одна из многих :)
В среде все равно удобнее, т.к. хотя бы не приходится искать определение каждого макроса, особенно, если он определен по-разному в зависимости от других макросов.
Но опять же - если 3rd party не сделала проект под эту среду - само создание проекта, скорее всего, займет слишком много времени.
ygrek.org.ua
Некоторые умельцы вон даже сделали целиком на камле замену для сишного libtls.
no subject
no subject
no subject
no subject
no subject
no subject
no subject
- ваш Кэп
no subject
no subject
no subject
no subject
Ваш кэп ;)
no subject
спасибо, сэкономили мне время :)