2015-07-09 5 views
2

Я использую mono, и мой исполняемый файл выходит нормально.Что делает mono возвращает код 249 означает?

Однако делать echo $? после выполнения, я получаю 249.

Я не могу найти список моно кода возврата, есть место, чтобы найти его?

+0

Это должно означать, что ваше приложение выходит с кодом выхода 249. Вы уверены, что этого не происходит? –

ответ

2

Я считаю, что ваше приложение выходит с кодом ошибки -7. Число отрицательно, потому что libc добавляет знак минус ко всем кодам ошибок, возвращаемым системными вызовами ядра (которые являются positive целыми числами). В конце концов, bash конвертирует -7 в 249 через $?.

test.sh

#!/bin/bash 
exit -7 

Вызов test.sh

bash test.sh 
$? 
249 
+0

Тогда не будет ли exec работать? Потому что он работает отлично, делает то, что предполагается – Cher

+0

Да. Я считаю, что это не должно начинаться, если аргументы ошибочны. Тем не менее, проверьте точную версию библиотеки 'libc', используемой вашим приложением, потому что, например, [Здесь] (Http: //www.delorie.com/djgpp/doc/libc/libc_293.html) вы можете найти другой набор кодов ошибок. –

1

Mono Коды возврата:

0 или -1 (255 в POSIX) для точек главного входа недействительного типа

  • Примечание: Если тип возвращаемого Main недействительна, -1 только установить ExitCode если ип рукоятью было брошено исключение

Любое ИНТ значение для главного входа точек целого типа

  • Posix/Bash будет боксировать, что 0-255 из-за исторический код выхода (младшие 8 бит) и статус (верхние 8 бит) (если вы не работаете в Posix системы 2001 ;-)
  • Полных ИНТ значений могут быть оппонентом exec'ing (system/fork/spawn/etc ...)

Опять же, -1 'зарезервирован' для выходов на основе исключения ...

Основываясь на точке входа, имеющего станд MONO_TYPE_I4 (0x08) возвращение подписи:

 MonoObject *res; 
     res = mono_runtime_invoke (method, NULL, pa, exc); 
     if (!exc || !*exc) 
       rval = *(guint32 *)((char *)res + sizeof (MonoObject)); 
     else 
       rval = -1; 
     mono_environment_exitcode_set (rval); 

И предполагается, что вы не выполняйте свою программу и не откорректируйте ее до отладчика, и вы не устанавливаете код выхода самостоятельно, получение кода выхода 249/-7 означает нестандартный выход и базирование в ограниченных точках выхода и области, которые могут иметь код выхода , Я бы поискал нить, которую вы не очищаете (т.е. управляемый поток становится «родным» pthread на OS-X или __thread в Linux или ...), или какой-то другой процесс, который запускается в режиме native/interop (графический процессор, файловая система и т. д.).

Вы всегда можете запустить свое приложение «MONO_LOG_LEVEL = debug mono someapp.exe» и найти след на выводе/выходе.