自从升级到 Ubuntu 19.10 以来,使用默认 gcc(9.2.1)编译的程序时,gdb(8.3)几乎无法使用,-O0 -ggdb -g3
因为显示的变量大多数值都是错误的。
该项目曾经使用-gdwarf-2 -g3
。根据 gcc 文档-ggdb
提供的最佳支持,但并没有什么区别。
请注意,在运行 gdb Fedora 8.3-7.fc30 和 gcc 9.2.1 的 Fedora 30 机器上,一切运行正常。两台机器都是 x86_64。
我真的是唯一一个吗?只是为了展示发生了什么:
Thread 1 "swipl" hit Breakpoint 1, PL_error (
pred=0x214 <error: Cannot access memory at address 0x214>, arity=32767,
msg=0x7ffff7df9468 <PL_unify_int64__LD+52> "\311\303\363\017\036\372UH\211\345H\203\354`H\211}\250H\211u\240dH\213\004%(", id=4160516576)
at ../src/pl-error.c:94
94 { GET_LD
(gdb) bt
#0 PL_error (pred=0x214 <error: Cannot access memory at address 0x214>,
arity=32767,
msg=0x7ffff7df9468 <PL_unify_int64__LD+52> "\311\303\363\017\036\372UH\211\345H\203\354`H\211}\250H\211u\240dH\213\004%(", id=4160516576)
at ../src/pl-error.c:94
如果我们看一下调用点,我们会看到
return PL_error(NULL, 0, NULL, ERR_PERMISSION_PROC,
ATOM_redefine, ATOM_imported_procedure, proc);
前三个参数都是 0,但 gdb 声称它们具有一些虚假值。