Zaskoczyło mnie dzisiaj gdb
:
Program exited with code 0146.
gdb
wypisuje kod powrotu ósemkowo ; sprawdzam, dlaczego znalazłem:
http://comments.gmane.org/gmane.comp.gdb.devel/30363
Ale to nie jest szczególnie satysfakcjonująca odpowiedź. Szybkie wyszukiwanie w Google nie ujawniło historii, więc miałem nadzieję, że ktoś na SO może poznać historię z przeszłości.
Nieco powiązane pytanie, w jaki sposób można nawet wyświetlić kod powrotu ósemkowo? Być może starsze maszyny zawsze drukowały kod powrotu?
$ printf %o\\n $?
Jest dość niezręczny :)
$?
jest wartość skorupy dla kodu powrotu, i jest cyfrą dziesiętną (lub robi gdb wsparcie Twój przykład cmd też?). Nie wiem, dlaczego gdb zgłasza to ósemkowo. Moim rozwiązaniem jest wydostanie się z pamięci,man ascii
aby zobaczyć, co oznaczają wartości ósemkowe. Interesujące pytanie, ponieważ napotykasz także wartości ósemkowe z innych programów. Być może jest to omówione w „Unix Programming Envioronment” Kernighana i Pike'a. Powodzenia.man ascii
do konwersji liczby ósemkowej na dziesiętną.bc
byłby lepszym wyborem.Odpowiedzi:
Reprezentacja ósemkowa ułatwia interpretację kodu wyjścia dla małych wartości, które są najczęściej używane. Gdyby liczba ta, która jest bajtem, była drukowana w systemie dziesiętnym, znalezienie przerwanego sygnału wymagałoby trochę obliczeń w trybie ósemkowym, można je odczytać takimi, jakimi są:
gdb
wyświetla,05
co nie ma znaczeniaSIGINT
( Control+ C),gdb
wyświetlacze0202
, które jest łatwiej rozpoznać jako sygnał # 2 ni130
.Co więcej, status wyjścia może być również trochę maską iw takim przypadku ósemkowy (przynajmniej wtedy, gdy jesteś do tego przyzwyczajony, co było bardziej powszechne kilka dekad temu niż obecnie) jest łatwiejszy do mentalnego przekształcenia w bity niż dziesiętny, a nawet szesnastkowy, podobnie jak na przykład
chmod
jeszcze przyjąć liczbę ósemkową do reprezentowania uprawnienia do plików:0750 = 111 101 000 = rwx r-x ---
.źródło
Nie mam kopii tego tekstu i po prostu przeczytałem krótki tekst dostępny w książkach Google, ale. Zgodnie z przewodnikiem X / Open Portability Specyfikacje System V Polecenia i narzędzia str 283 (według książek google)
jeśli aplikacja zakończy się nienormalnie, jej kodem wyjścia jest status ósemkowy 0200 + i istnieje lista wspólnych wartości „status” (które prawdopodobnie są również podawane w postaci ósemkowej).
Więc to / był zły komunikat o błędzie mans.
źródło