Что значит программа завершилась с кодом 0

Я пишу очень простой код консольного приложения .Net Framework (4.7) и намеренно генерирую необработанное исключение. Но все же выход из программы с кодом 0 (0x0), который должен указывать на успешное выполнение.

Мой вопрос: я ожидаю любого кода выхода, но не 0. Может ли кто-нибудь объяснить мне, что мне здесь не хватает?

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp2 < class Program < static void Main(string[] args) < throw new Exception(«Throw an exception»); Console.WriteLine(«Finishing program»); Console.ReadLine(); >> >

Сообщение в окне вывода (отладка):

Необработанное исключение типа System.Exception в ConsoleApp2.exe

Программа «[7480] ConsoleApp2.exe» завершилась с кодом 0 (0x0).

andreyk2 Hohlov 17 Мар 2020 в 23:36

Вы не устанавливаете код выхода — ни через Environment.ExitCode nor via static int Main(…) < return ; >` — таким образом применяется код выхода по умолчанию. Как фреймворк узнает, каким должен быть правильный код выхода из ошибки для каждого конкретного исключения?

Криштиану Роналду в паке 70+ #FIFA FIFA MOBILE #fifa22 #cristianoronaldo

17 Мар 2020 в 23:48

Во-первых, я смутно припоминаю, что осмысленные коды выхода могут быть только у консольных приложений. Оконные приложения не нуждаются в такой функциональности. Во-вторых, возможно, вам придется установить код выхода самостоятельно. Перехватите исключение и установите там код выхода.

Dialecticus
18 Мар 2020 в 00:13

2 ответа

Лучший ответ

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp2 < class Program < bool continueThrow = true; static int Main(string[] args) < try< //doThings >catch(Exception ex) < //log the exception; Environment.ExitCode = number; if(continueThrow)< throw; >> Console.WriteLine(«Finishing program»); Console.ReadLine(); return 0; > > >
DrkDeveloper 18 Мар 2020 в 04:56

Читайте также:
Работа с видео лучшие программа

Это просто неправильно. Код выхода не будет равен нулю, если возникло необработанное исключение. Проблема OP возникает из-за ошибки, указанной Майком Накисом.

19 Фев 2021 в 12:38
См. раздел Объяснение ответов, полностью основанных на коде. Ваш ответ мог бы сделать с объяснением.
2 Май 2022 в 14:51

Это происходит из-за . (тадааа . )

Ошибка в отладчике Visual Studio!

Отладчик сообщает, что код выхода равен нулю, но отладчик лжет вам , а код выхода фактически не равен нулю.

У отладчика Visual Studio есть особенность, заключающаяся в том, что он сообщает код выхода программ, завершившихся из-за необработанных исключений, как 0 в Windows, но это происходит только при запуске программы из отладчика VS. Этого не происходит, когда вы запускаете программу из командной строки.

(Обратите внимание, что они называют это причудой, а не ошибкой; высокомерие этой компании ошеломляет.)

Что делать когла вылез синий экран смерти? #bsod #синийэкран #bluescreen

Попробуйте запустить программу из пакетного файла и отобразите %errorlevel% , чтобы увидеть настоящий код выхода.

Подожди, станет лучше!

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

Правильно, код выхода -532462766.

Не 0, не 42, не -532462765, а именно -532462766.

В 32-битном шестнадцатеричном формате это число 0xE0434352, которое представляет собой безымянный, в значительной степени недокументированный общий HRESULT, который в основном означает «ошибка из-за некоторых неуказанных причин, специфичных для приложения, мы не говорим вам, что именно». В этом случае причина, связанная с приложением, заключается в том, что необработанное исключение DotNet вызвало сбой процесса. Ходят слухи, что этот HRESULT известен как «EXCEPTION_COMPLUS» или «CLR_EXCEPTION_V4», хотя удачи в поиске обрывка документации для этого. (Кроме того, я мог бы заявить, что последние 3 шестнадцатеричных цифры означают «CCR», что представляет собой ссылку на известную рок-группу 70-х, удачи в опровержении моего утверждения!)

Читайте также:
Алгоритм программы по коду

Подождите, будет еще лучше!

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

  • перехват исключения и установка ExitCode перед его повторным генерированием;
  • перехват исключения и вызов Environment.Exit() с передачей собственного кода выхода;
  • зарегистрировать обработчик необработанных исключений AppDomain и установить там ExitCode ;
  • регистрация обработчика необработанных исключений AppDomain и вызов Environment.Exit() с вашим собственным кодом выхода из обработчика;

Все это будет пустой тратой времени. Ничего из этого не сработает. Microsoft сделала все возможное, чтобы в случае необработанного исключения процесс DotNet завершился с кодом завершения -532462766 и ничем, кроме кода завершения -532462766.

Источник: question-it.com

Почему код завершается с кодом 0?

, но почему-то в консоли выдаётся:63fe53960d246861728983.png. Так же в откладке много ошибок, некоторые из них:
63fe53df021a6126376198.png
63fe53e5b1a62894252990.png

  • Вопрос задан 28 февр.
  • 123 просмотра

Комментировать
Решения вопроса 2

Код завершения процесса 0 — стандартный код обозначающий что всё завершилось без критичных проблем (т.е. успешно, хороошо).
На скриншотах никаких ошибок нет, только сообщения от дебаггера о загрузке стандартный dll файлов и завершении потоков.

Ответ написан 28 февр.
Комментировать
Нравится 6 Комментировать
Bigdata Engineer

Ноль — это хорошо. Отсутствие ошибок. Если ты хочешь возвращать какие-то
статусные коды из функции main — то ее надо объявить как-то так

int main(int argc, char **argv)

И тогда операционка увидит 555 и можно делать какую-то логику принятия решений. В Windows кажется переменная %errorlevel% отвечает за статусы.

Источник: qna.habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru