gpt4 book ai didi

c++ - 如何使用 gdb 查看 C++ 类在内存中的布局?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:27 31 4
gpt4 key购买 nike

我有一个程序的调试版本(V8 JavaScript VM),我想了解某些类的实例是如何在内存中布局的。我可以像这样漂亮地打印结构:

(gdb) print thread_local
$6 = {
blocks_ = {
data_ = 0x868ceb0,
capacity_ = 7,
length_ = 1
},
entered_contexts_ = {
data_ = 0x868d828,
capacity_ = 1,
length_ = 1
},
saved_contexts_ = {
data_ = 0x868d838,
capacity_ = 1,
length_ = 1
},
spare_ = 0x0,
ignore_out_of_memory_ = false,
call_depth_ = 1,
handle_scope_data_ = {
next = 0x0,
limit = 0x0,
level = 0
}
}

但我想知道那些不同的成员( block 、entered_contexts 等)相对于对象的开始在物理上的位置。在基于 Solaris 的系统上,mdb 可以像这样为 C 结构执行此操作:

> ::print -at port_event_t
0 port_event_t {
0 int portev_events
4 ushort_t portev_source
6 ushort_t portev_pad
8 uintptr_t portev_object
10 void *portev_user
}

在该示例中,每个字段都以其距结构开头的偏移量为前缀。我想对 C++ 类做同样的事情。 gdb 必须有这些信息才能打印出结构成员,但是有什么方法可以查看它吗?

或者,对于正在运行的程序,是否有其他方法可以做到这一点?

最佳答案

你总是可以打印出每个成员的地址和this来自己弄清楚(你使用&来获取成员地址,就像在语言本身中一样).

关于c++ - 如何使用 gdb 查看 C++ 类在内存中的布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7746461/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com