2009-06-30 2 views
3

Я хотел бы изменить способ отображения некоторых типов с помощью «dt» или «?» аналогично тому, как вы можете сделать это с помощью autoexp.dat. Есть ли способ сделать это?У cdb/windbg есть эквивалент autoexp.dat?

К примеру, у меня есть структура что-то вроде этого:


struct Foo 
{ 
    union Bar 
    { 
     int a; 
     void *p; 
    } b; 
}; 

И у меня есть массив несколько сотен из них, все из которых я знаю точку в структуру адвокатуры. Есть ли способ сообщить cdb, что в этом выражении, что 'p' является указателем на Bar? Это то, что вы могли бы сделать с autoexp. (Конкретным примером здесь является то, что у меня есть stashtable, который может иметь ключи любого типа, но я знаю, что они являются строками, реализация сохраняет их как указатели void).

Заранее благодарен!

ответ

2

Я не думаю, что есть что-то простое, как autoexp.dat.

У вас есть пара возможных вариантов - вы можете написать простой файл сценария с командами отладчика, чтобы выгрузить структуру данных так, как вы хотите, и использовать команду «$<filename» (или один из ее вариантов). В сочетании с пользовательскими псевдонимами вы можете сделать это довольно простым и естественным в использовании.

Второй вариант довольно вовлекается, но с ним гораздо больше энергии - напишите DLL-расширение, которое сбрасывает вашу структуру данных. Что-то вроде того, о чем вы говорите, вероятно, слишком велико. Но у вас огромная сила с расширениями отладчика (фактически, большая часть мощности, которая поставляется в пакете инструментов отладки, реализована таким образом). SDK упакован вместе с отладчиком, поэтому легко определить, действительно ли это возможно.

1

Вы можете сказать du или da, чтобы получить его dump memory в виде строк unicode или ascii.

+0

Если у меня есть массив, который имеет элемент, указывающий на строку, которая находится где-то еще в памяти, я могу вызвать 'da' на адрес этого указателя как часть печати массива? – aaron

+0

Если вы знаете начальный адрес массива, вы должны иметь возможность рассчитать смещение от начального адреса к элементу, который вы хотите (sizeof (struct) * i), а затем добавить смещение (выровненный по DWORD) элементу внутри структура. Вы также можете сделать dt -r по адресу struct, чтобы отладчик рекурсивно сбросил все члены. –

 Смежные вопросы

  • Нет связанных вопросов^_^