为什么 gdb 不能看到所有范围内的全局符号

共0个回答, 标签: c++ linux gdb debug-symbols symbol-table

我正在调试一个带有完整符号 (程序和提升 lib) 的升压程序。在提升中, 有一个变量叫 boost::fibers::context_initializer::active_ 。这可以通过运行

(gdb) info variables .*context_init.*
All variables matching regular expression ".*context_init.*":

File libs/fiber/src/context.cpp:
boost::fibers::context *boost::fibers::context_initializer::active_;
std::size_t boost::fibers::context_initializer::counter_;

我可以从程序中的一个线程中看到它, 但不能从另一个线程看到它, 即使它是全局的:

(gdb) thread 1
[Switching to thread 1 (Thread 0x7ffff7fcd040 (LWP 10470))]
#0  0x00007ffff6c089f3 in futex_wait_cancelable (private=, expected=0, futex_word=0x60c000000234) at ../sysdeps/unix/sysv/linux/futex-internal.h:88
88  in ../sysdeps/unix/sysv/linux/futex-internal.h
(gdb) p boost::fibers::context_initializer::active_
No type "fibers" within class or namespace "boost".
(gdb) thread 3
[Switching to thread 3 (Thread 0x7ffff3d28700 (LWP 10475))]
#0  boost::fibers::context::active () at libs/fiber/src/context.cpp:106
106     thread_local static context_initializer ctx_initializer;
(gdb) p boost::fibers::context_initializer::active_
$1 = (boost::fibers::context *) 0x7ffff1869700

如果我只是尝试 pt boost::fibers::context_initializer 或尝试, 也会发生 pt ::boost::fibers::context_initializer 这种情况。

这可能是什么原因造成的?全局变量和类型不应该在所有范围内可见吗?

相关问题

UTF-8 一路通过 错误: TCP 提供程序: 错误代码 0x2746。在 linux 下通过终端进行 Sql 设置时 为什么是统计:: st _ size 0 为设备, 但同时 lseek 正确地定义了设备大小? 为什么 _ _ libc_start_main 的地址在 GDB 内总是相同的,即使 ASLR 打开? 为什么 gdb 不能看到所有范围内的全局符号