프로그램의 디버그 빌드 (V8 JavaScript VM)가 있는데 특정 클래스의 인스턴스가 메모리에 어떻게 배치되어 있는지 알고 싶습니다. 이 같은 꽤 인쇄 구조 할 수 있습니다어떻게하면 C++ 클래스가 gdb로 메모리에 배치되는지 볼 수 있습니까?
(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
}
}
하지만 난 그 다양한 회원 (블록, entered_contexts 등), 물리적 객체의 시작에 상대적 위치를 알고 싶어요. 솔라리스 기반 시스템 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는 구조체 멤버를 출력하기 위해이 정보를 가지고 있어야하지만 그것을 볼 수있는 방법이 있습니까?
다른 방법으로 실행중인 프로그램에 대해이 작업을 수행 할 다른 방법이 있습니까?
감사합니다. 이것은 매우 흥미있어 보인다. –