Другое событие 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));
}
Тест повышения предлагает следующий рекомендации использования для Visual Studio, который позволил бы Вам выполнить модульные тесты автоматически в конце компиляции и получить вывод в окно сборки.
хороший побочный эффект этого приема - он, позволяют Вам рассматривать тестовые отказы как ошибки компиляции. "... Вы могли перейти через эти ошибки с помощью обычных ярлыков/щелчков мышью клавиатуры, которые Вы используете для анализа ошибки компиляции..."
Просто пользуйтесь регистрирующейся библиотекой, как log4net, и имейте его журнал в файл appender.
Вы могли также установить свой исполняемый файл как внешний инструмент и отметить инструмент для окно вывода Использования . Тем путем вывод инструмента будет видим в рамках самой Visual Studio, не отдельного окна.
Это на самом деле было бы больше усилия, но Вы могли просто создать в VS.Net, выполнить его из регулярной командной строки (cmd.exe), и затем присоединить к процессу после того, как это начинает работать. Это - вероятно, не решение, которое Вы ищете как бы то ни было.
Установите точку останова на последней строке кода.
Попытайтесь запустить приложение с Ctrl + комбинация F5 .
Вы говорите, что не хотите использовать эти 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 так, чтобы переменные среды не были правильно переданы, когда программа будет запущена то - тогда это просто перестанет работать тихо.
Я запускаю приложение с помощью F11 и получаю точку останова где-нибудь в unit_test_main.ipp (может быть ассемблерный код). Я использую shift-f11 (выход) для запуска модульного теста и получения следующей инструкции по сборке в CRT (обычно в mainCRTStartup ()). Я использую F9, чтобы установить точку останова на этой инструкции.
При следующем вызове я могу запустить приложение с помощью F5, и приложение прекратит работу после запуска тестов, что даст мне возможность заглянуть в окно консоли
Сделайте readline в конце (это "forma cochina", как говорят в Колумбии, но это работает):
static void Main(string[] args)
{
.
.
.
String temp = Console.ReadLine();
}