2016-09-23 9 views
1

В командной строке я знаю, что с помощью echo $? получает код выхода. В gdb я использую «r» для запуска программы, и программа завершается, и как gdb получает этот код выхода? Любые команды внутри gdb?Как gdb извлекает код выхода целевой программы?

Спасибо!

+0

Ваш вопрос о том, как вывести значение выхода в БГД (который отвечал Том Tromey) или о том, как GDB получает эту ценность внутри? –

ответ

2

Когда программа завершает работу, GDB устанавливает переменную удобства $_exitcode код завершения.

Так Дано:

int main() { 
    return 23; 
} 

Запуск его в БГД, я получаю:

(gdb) run 
Starting program: /tmp/q 
[Inferior 1 (process 3677) exited with code 027] 
(gdb) print $_exitcode 
$1 = 23 
+1

[Inferior 1 (процесс 3677), выходящий с кодом 027] <- 027 равен 27 восьмеричным, что на самом деле равно 23 десятичным. См. Https://unix.stackexchange.com/questions/24368/unix-history-return-code-octal по причинам ... – mrexodia

1

Он просто печатает код выхода в конце сеанса отладки, когда программа завершается. Или печатает exited normally для 0 код выхода. См тест сеанса отладки для этой тестовой программы:

#include <stdlib.h> 

int main(int argc, char *argv[]) { 
    return atoi(argv[1]); 
} 

Debug сессия:

[[email protected] ~]$ gdb -q ./a.out 
Reading symbols from ./a.out...(no debugging symbols found)...done. 
(gdb) r 0 
Starting program: /home/ksemenov/a.out 0 
Missing separate debuginfos, use: dnf debuginfo-install glibc-2.23.1-10.fc24.x86_64 
[Inferior 1 (process 19162) exited normally] 
(gdb) r 1 
Starting program: /home/ksemenov/a.out 1 
[Inferior 1 (process 19166) exited with code 01] 
(gdb) r 6 
Starting program: /home/ksemenov/a.out 6 
[Inferior 1 (process 19167) exited with code 06] 
(gdb)