Сегодня меня застали врасплох gdb
:
Program exited with code 0146.
gdb
выводит код возврата в восьмеричном виде ; выясняю, почему я нашел:
http://comments.gmane.org/gmane.comp.gdb.devel/30363
Но это не особенно удовлетворительный ответ. Некоторый быстрый поиск в Google не раскрыл историю, поэтому я надеялся, что кто-то на SO может знать предысторию.
Несколько связанный вопрос, как можно было бы просмотреть код возврата в восьмеричном виде? Возможно, старые машины всегда печатали код возврата?
$ printf %o\\n $?
Довольно неловко :)
$?
оболочки для кода возврата и десятичная цифра (или GDB также поддерживает ваш пример cmd?). Не знаю, почему GDB сообщает об этом в восьмеричном. Мое решение состоит в том, чтобы выйти иman ascii
увидеть, что означают восьмеричные значения. Интересный вопрос, поскольку вы также наталкиваетесь на восьмеричные значения из других программ. Может быть, это обсуждается в Kernighan и Pike 'Unix Programming Envioronment'. Удачи.man ascii
было бы бесполезно преобразовывать восьмеричное в десятичное.bc
будет лучшим выбором.Ответы:
Восьмеричное представление облегчает интерпретацию кода выхода для небольших значений, которые наиболее часто используются. Если это число, которое является байтом, было напечатано в десятичном виде, то для определения того, какой сигнал прервал процесс, потребуется немного вычислений, а в восьмеричном, они могут быть прочитаны как есть:
gdb
отображает05
без разницыSIGINT
( Control+ C),gdb
дисплеи ,0202
которые легче распознать как сигнал # 2 , чем130
.Кроме того, состояние выхода также может быть битовой маской, и в этом случае восьмеричное значение (по крайней мере, когда вы к нему привыкли, что было более распространенным пару десятилетий назад, чем в наши дни), легче преобразовать мысленно в биты, чем десятичное или даже шестнадцатеричный, так же , как, например , по-
chmod
прежнему принимает восьмеричное число для представления прав доступа к файлам:0750 = 111 101 000 = rwx r-x ---
.источник
У меня нет копии этого текста, и я просто прочитал краткую рекламу, доступную в книгах Google, но. Согласно руководству по переносимости X / Open System V Спецификации Команды и утилиты, стр. 283 (согласно Google Books)
если приложение завершает работу ненормально, его статус выхода - восьмеричное 0200 + status, и есть список общих значений «status» (которые, вероятно, также приведены в восьмеричном виде).
Так что это / было сообщение об ошибке бедного человека.
источник