Gdb recoursive type printing — различия между версиями
Материал из SEWiki
Zps (обсуждение | вклад) (добавлено описание проекта) |
Zps (обсуждение | вклад) м |
||
Строка 53: | Строка 53: | ||
+0x000 m_b : int32B | +0x000 m_b : int32B | ||
+0x020 m_a : [5] A | +0x020 m_a : [5] A | ||
− | +0x000 m_a : int32B | + | +0x000 m_a : [5] int32B |
</pre> | </pre> | ||
Текущая версия на 19:33, 18 марта 2011
- Студент: TBD
- Руководитель: TBD
Описание: зачастую разработчикам приходится анализировать чужой код. Одним из инструментов анализа может является отладчик.
Пусть у нас есть код:
1 class A 2 { 3 int m_a[5]; 4 public: 5 A() 6 {} 7 }; 8 9 class B 10 { 11 int m_b; 12 A m_a[5]; 13 public: 14 B() 15 {} 16 }; 17 18 int main(int argc, char** argv) 19 { 20 A a; 21 B b; 22 return 0; 23 }
Открыв скомпилированый код в gdb мы можем просмотреть информацию о типах:
(gdb) pt B type = class B { private: int m_b; A m_a[5]; public: B(void); }
В WinDBG есть команда позволяющая вывести как объект расположен в памяти:
> dt -r B a.exe!B +0x000 m_b : int32B +0x020 m_a : [5] A +0x000 m_a : [5] int32B
Цель проекта расширить команду pt в GDB, добавив возможность просматривать как типы/объекты распологаются в памяти в том числе и рекурсивно
Ожидаемый результат:
- patch принят в GDB
Ссылки: