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

Материал из SEWiki
Перейти к: навигация, поиск
(Новая страница: «* Студент: TBD * Руководитель: TBD Описание: Ожидаемый результат: * patch принят в GDB Ссылки: TBD»)
 
м
 
(не показана одна промежуточная версия этого же участника)
Строка 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
  
Ссылки: TBD
+
Ссылки:  
 +
* 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

Ссылки: