команда для удаления операторов отладки - PullRequest
1 голос
/ 01 марта 2012

Я обычно отлаживаю свои программы, используя операторы печати (перенаправленные в файл журнала).Я помещаю #define _DEBUG вверху и помещаю все операторы печати между #ifdef _DEBUG и #endif, чтобы, убедившись в правильности работы программы, я мог изменить #define и больше не появлялся ни один из операторов печати.

Единственным недостатком является то, что со всеми #ifdefs в программе он вообще не читается, потому что #ifdefs начинается с начала строки.

Есть ли способ, которым я могу удалить все #ifdef, #endif, а также все строки между ними?

Я могу сделать это, используя запись, если есть одинаковое количество операторов печатимежду определением условия.

Ответы [ 2 ]

4 голосов
/ 01 марта 2012

Я уверен, что вы можете удалить их как-нибудь, но почему? Вы не должны начинать #ifdef s в начале строки, это совершенно правильно :

int getVal (void) {
    int x = 10
    #ifdef MY_DEBUG_FLAG
        printf ("Returning %d\n", x);
    #endif
    return x;
}

Еще одна вещь, которую вы должны рассмотреть, это не определять переменную непосредственно в исходном коде с помощью чего-то вроде:

#define MY_DEBUG_FLAG

У большинства компиляторов есть переключатель, который выполняет те же действия перед обработкой исходного кода:

gcc -DMY_DEBUG_FLAG ...

Таким образом, вам нужно всего лишь изменить глобальные флаги компилятора в вашем make-файле (или любом используемом вами инструменте сборки), почти наверняка в одном месте, а не в каждом исходном файле.

И вы все равно можете выборочно включать отладку для отдельных файлов, если необходимо, временно изменяя только одну команду компилятора. Насколько это легко, зависит от вашей системы сборки, но все, что я использовал, делает ее довольно безболезненной.

1 голос
/ 01 марта 2012

Довольно распространенный подход заключается в использовании макроса препроцессора для вставки операторов печати, которые компилируются только во время отладочной сборки. Это должно помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...