Gdb recoursive type printing — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
(добавлено описание проекта)
м
 
Строка 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

Ссылки: