Можно ли разворачивать макросы в gdb?
Я скомпилировал двоичный файл с -g3, и я вижу определения макросов:
(gdb) info macro NGX_CORE_MODULE
Defined at /path/src/core/ngx_conf_file.h:70
included at /path/src/core/ngx_core.h:86
included at /path/src/core/ngx_cycle.c:9
#define NGX_CORE_MODULE 0x45524F43
(gdb)
, но когда я вижу переменную, я вижу числовое значение вместо имени макроса
(gdb) p/x cycle->modules[0]->type
$17 = 0x45524f43
(gdb)
возможно ли получить что-то вроде этого:
(gdb) p cycle->modules[0]->type
$17 = NGX_CORE_MODULE
(gdb)
Я пробовал пользовательскую функцию, подобную этой:
define expand_module_type_macro
if $arg0 == 0x45524F43
print "NGX_CORE_MODULE"
else
if $arg0 == 0x464E4F43
print "NGX_CONF_MODULE"
else
print $arg0
end
end
end
и он работает
(gdb) expand_module_type_macro cycle->modules[0]->type
$18 = "NGX_CORE_MODULE"
(gdb)
но он не имеет практического применения, потому что я не могу использовать его со сложным выводом:
(gdb) printf "module type=%s\n", expand_module_type_macro cycle->modules[0]->type
No symbol "expand_module_type_macro" in current context.
(gdb) set $m = expand_module_type_macro cycle->modules[0]->type
No symbol "expand_module_type_macro" in current context.
(gdb)