Странное поведение отладчика при использовании #line control - PullRequest
5 голосов
/ 18 сентября 2010

Я использовал приведенный ниже код и пытался отлаживать в Visual Studio 2008, нажав клавишу F10.

//test.cpp
#include<iostream>
using namespace std;

int main(void)
{
#line 100 "test.cpp"
   cout<<"Inside main()"<<endl;
   return 0;
}

Ниже приведен снимок экрана отладчика.

alt text

#line 100 говорит компилятору перейти к строке 100, чтобы получить следующую строку.Поскольку сотая строка не существует, она выходит за пределы основной функции, как показано на скриншоте.Если я пытаюсь отладить код с помощью F10, управление никогда не возвращается к основной функции.Он продолжает показывать указатель вне главной функции, даже если он выполняет функцию main ().

Если вместо test.cpp я даю другое имя файла, указатель переходит на этот файл, но не возвращается к test.cpp

Любая идея, почему отладчик ведет себя так

Ответы [ 2 ]

8 голосов
/ 18 сентября 2010

Эта директива должна использоваться генераторами кода.Инструменты, которые переводят с одного языка на другой.Так что, когда вы отлаживаете этот код, отладчик покажет исходный файл исходного языка, шаг за шагом выполняя инструкции этого языка.Вместо (часто загадочных) утверждений в переведенном коде.

Что вы здесь не сделали, вы даете бессмысленную информацию в директиве.И, очевидно, получили глупые результаты при отладке.Гиго, мусор на входе, мусор на выходе.Удалить директиву.

1 голос
/ 18 сентября 2010

Директива не изменяет фактический поток управления. Это изменяет вывод, сгенерированный компилятором во время компиляции. Прочитайте документы - это объясняет, почему вы ожидаете поведение, описанное выше?

Для C # есть ссылка на сокрытие строк кода от отладчика, но это все равно не изменяет ожидаемый поток управления.

На обоих языках вам придется изменить поток выполнения вручную, используя «Задать следующую инструкцию» после выбора необходимой следующей строки кода. Установка следующей строки кода для выполнения вне текущей области может привести к сбоям в работе программы - в ссылочных документах есть дополнительные предупреждения.

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