C, магия макросов и отладка
Jul. 25th, 2016 10:18 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Судя по тому, что я наблюдаю в либах на Си (например, libuv), магия из макросов весьма популярна, в том числе и для реализации разного рода структур данных вроде списков, хэшей (https://troydhanson.github.io/uthash/) и прочего такого.
Вопрос вот в чем - как это нормально отлаживать то? Падает с access violation где-нибудь в кишках макроса на три страницы, отладчик указывает на строку с макросом и единственный способ понять происходящее - медитировать до бесконечности на содержимое переменных, используемых в макросе, потому что кода не видно. Ну или пытаться в уме разложить дизассемблированный код на исходники.
Вопрос вот в чем - как это нормально отлаживать то? Падает с access violation где-нибудь в кишках макроса на три страницы, отладчик указывает на строку с макросом и единственный способ понять происходящее - медитировать до бесконечности на содержимое переменных, используемых в макросе, потому что кода не видно. Ну или пытаться в уме разложить дизассемблированный код на исходники.
no subject
Date: 2016-07-25 07:22 am (UTC)no subject
Date: 2016-07-25 07:23 am (UTC)Да и сам не размазываю макросы больше, чем на 3-4 строчки тривиального кода.
no subject
Date: 2016-07-25 07:30 am (UTC)Похоже, у меня тут баг из-за того, что я структуру добавляю в один хэш, не выкинув из другого, что выносит мозги интрузивному хэшу просто напрочь.
no subject
Date: 2016-07-25 07:43 am (UTC)Всунуть в макросы отладочную печать.
no subject
Date: 2016-07-25 10:39 am (UTC)no subject
Date: 2016-07-25 08:17 am (UTC)А для совсем ада можно развернуть, отладить и попытаться свернуть обратно... В xcode на маке есть соответствующее представление (companion editor/preprocessed file) - но не помню, как при этом ходит по шагам (показывает ли позицию там).
no subject
Date: 2016-07-25 08:46 am (UTC)no subject
Date: 2016-07-25 09:01 am (UTC)no subject
Date: 2016-07-25 08:48 am (UTC)http://hipics.ru/images/2016/07/25/Image43bcbe.png
no subject
Date: 2016-07-25 04:09 pm (UTC)no subject
Date: 2016-07-25 06:22 pm (UTC)no subject
Date: 2016-07-25 07:26 pm (UTC)no subject
Date: 2016-07-25 08:09 pm (UTC)конечно, все перечисленное, мягко говоря, не идеально, но... сравниваем не с идеалом, а с макросами
no subject
Date: 2016-07-25 09:06 pm (UTC)Но конкретно в случае уже написанного кем-то макроса (увы, мир не идеален, иногда приходится работать с унаследованным или 3rd party кодом) C++ и самая-правильная-среда-разработки мало чем могут помочь. :(
no subject
Date: 2016-07-25 09:22 pm (UTC)В случае уже написанного - да, проблема. Одна из многих :)
В среде все равно удобнее, т.к. хотя бы не приходится искать определение каждого макроса, особенно, если он определен по-разному в зависимости от других макросов.
Но опять же - если 3rd party не сделала проект под эту среду - само создание проекта, скорее всего, займет слишком много времени.
no subject
Date: 2016-07-27 08:24 am (UTC)no subject
Date: 2016-07-27 09:11 am (UTC)- ваш Кэп
no subject
Date: 2016-07-27 09:13 am (UTC)no subject
Date: 2016-07-27 09:38 am (UTC)no subject
Date: 2016-07-25 09:04 am (UTC)коты используют макросы только для свёртки макросов дебажной инфы (строка, файл, функция), ну или для загрузки однотипных тестовых данных в коде
no subject
Date: 2016-07-25 09:13 am (UTC)no subject
Date: 2016-07-25 10:40 am (UTC)no subject
Date: 2016-07-28 09:12 pm (UTC)Ваш кэп ;)
no subject
Date: 2016-07-25 02:08 pm (UTC)no subject
Date: 2016-07-25 05:14 pm (UTC)no subject
Date: 2016-07-25 02:47 pm (UTC)no subject
Date: 2016-07-25 03:08 pm (UTC)Пару здоровенных проектов с нуля переписывать, похоже, гиблое дело - надо по частям на микросервисы перетаскивать, а там сплошные доисторические винды, фанатики-безопасники и админы с антивирусами, которые winapi и сеть ломают и прочее в том же духе.
Наверно, проще сменить работу было бы, но это не спортивно :)
no subject
Date: 2016-07-25 05:23 pm (UTC)Насчет же неспортивности, я как-то постепенно пришел к выводу, что мне время моей жизни дороже, чем понты доказывать тормозам, что ты не тормоз. Главное, а смысл? Через 10 лет это все пройдет, а время потрачено. На, в сущности, фигню.
no subject
Date: 2016-07-25 07:31 pm (UTC)no subject
Date: 2016-07-25 08:10 pm (UTC)no subject
Date: 2016-07-27 08:27 am (UTC)no subject
Date: 2016-07-27 09:03 am (UTC)no subject
Date: 2016-07-27 09:05 am (UTC)no subject
Date: 2016-07-27 09:11 am (UTC)ygrek.org.ua
Date: 2016-07-25 11:07 pm (UTC)Некоторые умельцы вон даже сделали целиком на камле замену для сишного libtls.
no subject
Date: 2016-07-27 04:37 am (UTC)no subject
Date: 2016-08-16 08:20 am (UTC)спасибо, сэкономили мне время :)
no subject
Date: 2016-07-27 08:22 am (UTC)