Как я делаю паузу Visual Studio после выполнения консольного приложения в режиме отладки?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

61
задан Peter Mortensen 9 December 2017 в 21:33
поделиться

9 ответов

Тест повышения предлагает следующий рекомендации использования для Visual Studio, который позволил бы Вам выполнить модульные тесты автоматически в конце компиляции и получить вывод в окно сборки.

хороший побочный эффект этого приема - он, позволяют Вам рассматривать тестовые отказы как ошибки компиляции. "... Вы могли перейти через эти ошибки с помощью обычных ярлыков/щелчков мышью клавиатуры, которые Вы используете для анализа ошибки компиляции..."

19
ответ дан Peter Mortensen 24 November 2019 в 16:55
поделиться

Просто пользуйтесь регистрирующейся библиотекой, как log4net, и имейте его журнал в файл appender.

0
ответ дан Peter Mortensen 24 November 2019 в 16:55
поделиться

Вы могли также установить свой исполняемый файл как внешний инструмент и отметить инструмент для окно вывода Использования . Тем путем вывод инструмента будет видим в рамках самой Visual Studio, не отдельного окна.

0
ответ дан Andrew 24 November 2019 в 16:55
поделиться

Это на самом деле было бы больше усилия, но Вы могли просто создать в VS.Net, выполнить его из регулярной командной строки (cmd.exe), и затем присоединить к процессу после того, как это начинает работать. Это - вероятно, не решение, которое Вы ищете как бы то ни было.

1
ответ дан Kibbee 24 November 2019 в 16:55
поделиться

Установите точку останова на последней строке кода.

10
ответ дан Kevin Timmerman 24 November 2019 в 16:55
поделиться

Попытайтесь запустить приложение с Ctrl + комбинация F5 .

122
ответ дан Peter Mortensen 24 November 2019 в 16:55
поделиться

Вы говорите, что не хотите использовать эти system("pause") взлом. Почему нет?

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

void pause () {
    system ("pause");
}

int main (int argc, char ** argv) {
    // If "launched", then don't let the console close at the end until
    // the user has seen the report.
    // (See the MSDN ConGUI sample code)
    //
    do {
        HANDLE hConsoleOutput = ::GetStdHandle (STD_OUTPUT_HANDLE);
        if (INVALID_HANDLE_VALUE == hConsoleOutput)
            break;
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        if (0 == ::GetConsoleScreenBufferInfo (hConsoleOutput, &csbi))
            break;
        if (0 != csbi.dwCursorPosition.X)
            break;
        if (0 != csbi.dwCursorPosition.Y)
            break;
        if (csbi.dwSize.X <= 0)
            break;
        if (csbi.dwSize.Y <= 0)
            break;
        atexit (pause);
    } while (0);

я просто вставляю этот код в каждое новое консольное приложение, которое я пишу. Если программа будет запущена от окна команд, позиция курсора не будет < 0,0>, и это не будет звонить atexit(). Если это было запущено от Вас отладчик (любой отладчик), консольная позиция курсора будет < 0,0> и эти atexit() вызов будет выполняться.

я получил идею из примера программы, который раньше был в библиотеке MSDN, но я думаю, что это было удалено.

ПРИМЕЧАНИЕ: реализация Microsoft Visual Studio системы () стандартная программа требует, чтобы переменная среды COMSPEC определила интерпретатор командной строки. Если эта переменная среды будет испорчена - например, если у Вас будет проблема в свойствах отладки проекта Visual Studio так, чтобы переменные среды не были правильно переданы, когда программа будет запущена то - тогда это просто перестанет работать тихо.

3
ответ дан Die in Sente 24 November 2019 в 16:55
поделиться

Я запускаю приложение с помощью F11 и получаю точку останова где-нибудь в unit_test_main.ipp (может быть ассемблерный код). Я использую shift-f11 (выход) для запуска модульного теста и получения следующей инструкции по сборке в CRT (обычно в mainCRTStartup ()). Я использую F9, чтобы установить точку останова на этой инструкции.

При следующем вызове я могу запустить приложение с помощью F5, и приложение прекратит работу после запуска тестов, что даст мне возможность заглянуть в окно консоли

0
ответ дан 24 November 2019 в 16:55
поделиться

Сделайте readline в конце (это "forma cochina", как говорят в Колумбии, но это работает):

static void Main(string[] args)
{
    .
    .
    .
    String temp = Console.ReadLine();
}
-1
ответ дан 24 November 2019 в 16:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: