Я пытаюсь автоматизировать тест, в котором я заставляю функцию возвращать ошибку. Но команда gdb «return (int) 22», похоже, не выполняется, и программа завершается с кодом успеха. Что-то особенное, что нужно сделать, чтобы заставить команду return работать в скрипте GDB?
Вот скрипт gdb, который я использую:
set width 0
set height 0
set confirm off
set pagination off
set verbose off
set breakpoint pending on
set args the program args
break file.c:function_in_which_to_break
commands 1
return 22
continue
end
run the program args
quit
Я бы запустил программу со следующей командной строкой GDB:
gdb --batch --command=rc my_program
Желаемое поведение состоит в том, что «function_in_which_to_break» возвращает 22. Остальная часть кода будет продолжать передавать это вверх по стеку вызовов до тех пор, пока программа не завершится, а код выхода программы должен быть 22.
Фактическое поведение состоит в том, что код завершения программы успешен.
Когда я запускаю программу под GDB в терминале (с помощью команды
gdb --args my_program the program args
), прервите файл file.c: function_in_which_to_break, введя команду «break file.c: function_in_which_to_break» и запустите, программа прервется там. Затем, когда я набираю «return 22» и «continue», программа ведет себя так, как я ожидаю, функция возвращает 22, программа возвращает 22, и отображается ожидаемая ошибка.
ОБНОВЛЕНИЕ: Когда я сказал, что программа возвращает «успех», я имел в виду, что gdb сообщил, что ребенок вернул успех. И когда я сказал, что программа возвращает 22, я имею в виду, что GDB сообщает, что ребенок возвращает 22 (на самом деле, он говорит «выход с кодом 026»). Сам GDB возвращает успех в обоих случаях.
ОБНОВЛЕНИЕ 2: Я обнаружил некоторые ошибки в автоматизации, связанные с вызовом GDB - в поиске «exited с кодом 026» в файле с ошибочным именем, вызовом скрипта gdb-rc с орфографической ошибкой и тому подобными глупостями. Как только они были исправлены, файл сценария gdb с оператором return среди команд, кажется, работает. Поэтому, как только кто-то напишет ответ типа «команды возврата должны работать так же, как и все остальные команды», я приму его. @ Ks1322