Отладка C программы с помощью GDB Я вижу следующее (сокращенно):
(gdb)
1808 found = readOptionFromFile(options_file,...
(gdb) p options_file
$1 = (FILE *) 0xa812140
(gdb) s
readOptionFromFile (file=0x0, ...) at options.c:376
376 bool readOptionFromFile(FILE *file, ... {
(gdb) p file
$2 = (FILE *) 0x0
(gdb) n
378 int len, argc, i, c, isActiveSection, isActivePass, passn=0;
(gdb) p file
$3 = (FILE *) 0xa812140
(gdb)
Обратите внимание, что после входа в функцию GDB представляет аргументы, в частности формальный аргумент file
, как 0x0
, что не соответствует ожиданиям, поскольку фактический аргумент options_file
был напечатан как 0xa812140 непосредственно перед вызовом. Даже печать на этом этапе показывает это неверное значение. Тем не менее, после next
последующего p
его снова будет показано значение 0xa812140.
Я могу понять это с технической точки зрения (прологи функций, стековые фреймы и т. Д.), Но как пользователь, я бы действительно хочу правильный вывод из GDB. Это известное / ожидаемое поведение или ошибка?
Я использую GNU gdb (Ubuntu 8.3-0ubuntu1) 8.3
на
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=19.10
DISTRIB_CODENAME=eoan
DISTRIB_DESCRIPTION="Ubuntu 19.10"
(На самом деле на WSL)