Все, что начинается с #…
, является инструкцией для препроцессора C ++ , который запускает до фактического компилятора C / C ++;препроцессор создает окончательный исходный код для компилятора.
Итак, вот что происходит, когда ваша программа компилируется.
Шаг первый: препроцесс
Препроцессор читает ваш код сверху внизи выполняет инструкции.
#define _GLIBCXX_DEBUG 1
Установите флаг с именем _GLIBCXX_DEBUG
на 1
.
#include <vector>
#include <iostream>
Считайте файл vector.h
и iostream.h
из того, что включает ваш компиляторпуть есть.Этот файл содержит больше кода C / C ++, а также инструкции препроцессора, которые теперь рекурсивно разворачиваются.Часть этого кода может выглядеть как
#if _CLIBCXX_DEBUG
prinf("Print me to debug!");
#endif
, и этот код появляется в вашем окончательном C / C ++.Если ваш _CLIBCXX_DEBUG
равен 0
, то кода там не будет.В результате вы можете собрать свой код перед его компиляцией.
В вашем случае этот дополнительный код добавляет специальные тесты в ваш окончательный файл C / C ++, которые вызывают появившееся сообщение об ошибке.Когда вы переключаете линии, флаг не будет установлен при обработке #include
, поэтому эти специальные тесты не будут добавлены в ваш источник.
См. этот вопрос о том, каквыгрузить окончательный код C / C ++, который на самом деле компилируется.
Шаг второй: скомпилировать
После того, как файл исходного кода C / C ++ был предварительно обработан (т. е. все включено, условно развернуто и т. д.)) затем фактический компилятор вызывается для построения вашего кода.
Есть ли способ переключить режим отладки в другой строке программы (без флагов компилятора)?
Измените значение этого флага в коде, как вам нужно.