Gdb recoursive type printing — различия между версиями
Материал из SEWiki
Zps (обсуждение | вклад) (Новая страница: «* Студент: TBD * Руководитель: TBD Описание: Ожидаемый результат: * patch принят в GDB Ссылки: TBD») |
Zps (обсуждение | вклад) м |
||
(не показана одна промежуточная версия этого же участника) | |||
Строка 2: | Строка 2: | ||
* Руководитель: TBD | * Руководитель: TBD | ||
− | Описание: | + | Описание: зачастую разработчикам приходится анализировать чужой код. Одним из инструментов анализа может является отладчик. |
+ | |||
+ | Пусть у нас есть код: | ||
+ | |||
+ | <code> | ||
+ | 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 } | ||
+ | </code> | ||
+ | |||
+ | Открыв скомпилированый код в gdb мы можем просмотреть информацию о типах: | ||
+ | |||
+ | <pre> | ||
+ | (gdb) pt B | ||
+ | type = class B { | ||
+ | private: | ||
+ | int m_b; | ||
+ | A m_a[5]; | ||
+ | |||
+ | public: | ||
+ | B(void); | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | В WinDBG есть команда позволяющая вывести как объект расположен в памяти: | ||
+ | |||
+ | <pre> | ||
+ | > dt -r B | ||
+ | a.exe!B | ||
+ | +0x000 m_b : int32B | ||
+ | +0x020 m_a : [5] A | ||
+ | +0x000 m_a : [5] int32B | ||
+ | </pre> | ||
+ | |||
+ | Цель проекта расширить команду pt в GDB, добавив возможность просматривать как типы/объекты распологаются в памяти в том числе и рекурсивно | ||
Ожидаемый результат: | Ожидаемый результат: | ||
* patch принят в GDB | * patch принят в GDB | ||
− | Ссылки: | + | Ссылки: |
+ | * http://www.gnu.org/software/gdb/ |
Текущая версия на 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
Ссылки: