Saya terlempar lengah hari ini oleh gdb
:
Program exited with code 0146.
gdb
mencetak kode kembali dalam oktal ; mencari tahu mengapa saya menemukan:
http://comments.gmane.org/gmane.comp.gdb.devel/30363
Tapi itu bukan jawaban yang sangat memuaskan. Beberapa googling cepat tidak mengungkapkan sejarah, jadi saya berharap seseorang di SO mungkin tahu cerita belakangnya.
Pertanyaan yang agak terkait, bagaimana orang akan melihat kode kembali dalam oktal? Mungkin mesin lama selalu mencetak kode pengembalian?
$ printf %o\\n $?
Cukup canggung :)
$?
adalah nilai shell untuk kode pengembalian, dan merupakan angka desimal (atau apakah gdb mendukung contoh cmd Anda juga?). Tidak tahu mengapa gdb melaporkannya dalam oktal. Solusi saya adalah keluar dari 'olman ascii
untuk melihat apa arti nilai oktal. Pertanyaan menarik, karena Anda juga mengalami nilai oktal dari program lain. Mungkin itu dibahas dalam Kernighan dan Pike 'Unix Programming Envioronment'. Semoga berhasil.man ascii
tidak akan berguna untuk mengubah oktal ke desimal.bc
akan menjadi pilihan yang lebih baik.Jawaban:
Representasi oktal memudahkan interpretasi kode keluar untuk nilai-nilai kecil, yang merupakan yang paling umum digunakan. Jika angka ini, yang merupakan byte, dicetak dalam desimal, menemukan sinyal mana yang menghentikan suatu proses akan memerlukan sedikit perhitungan sementara dalam oktal, mereka dapat dibaca sebagaimana adanya:
gdb
menampilkan05
yang tidak membuat perbedaanSIGINT
( Control+ C),gdb
tampilan0202
yang lebih mudah dikenali sebagai sinyal # 2 daripada130
.Selain itu, status keluar juga mungkin sedikit topeng dan dalam kasus seperti itu, oktal (setidaknya ketika Anda terbiasa dengan itu yang lebih umum beberapa dekade yang lalu daripada hari ini) lebih mudah untuk mengubah mental menjadi bit daripada desimal atau bahkan heksadesimal, seperti misalnya
chmod
masih menerima bilangan oktal untuk mewakili hak akses file:0750 = 111 101 000 = rwx r-x ---
.sumber
Saya tidak memiliki salinan teks ini dan hanya membaca uraian singkat yang tersedia di buku google tetapi. Menurut panduan X / Open Portability, Perintah & Utilitas Spesifikasi Sistem V hal 283 (menurut buku google)
jika aplikasi berhenti secara tidak normal, status keluarnya adalah status oktal 0200 +, dan ada daftar nilai umum 'status' (yang mungkin juga diberikan dalam oktal).
Jadi ini adalah pesan kesalahan pria miskin.
sumber