Отладка (Win): DIA против DBGHELP

Коротко и лаконично:

Каковы фактические различия между DIA (доступ к интерфейсу отладки) и библиотеками DBGHELP? Я знаю, что DIA основан на COM и кажется чрезвычайно мощным (а также может использоваться с управляемыми и неуправляемыми процессами), тогда как DBGHELP кажется очень удобным в использовании, но предлагает меньше возможностей.

Может ли кто-нибудь объяснить, в чем эти два различия и что можно сделать с одним, но не с другим? Я действительно изо всех сил пытаюсь найти полную убедительную информацию в Интернете :(

Извините, если это кажется скучным вопросом, и спасибо за любые ответы, которые у вас есть для меня! :)

С уважением ПуэрНоктис


person PuerNoctis    schedule 11.06.2012    source источник


Ответы (2)


DIA имеет согласованный интерфейс на основе COM. DbgHelp состоит из набора стандартных функций C.

Вот две статьи, которые я написал о DIA (с примерами C++), которые показывают силу DIA:

  1. Локатор файлов символов
  2. Как проверить содержимое файла базы данных программы (PDB)

По возможности используйте DIA, а не DbgHelp, поскольку DIA может использоваться любой программой, поддерживающей COM.

person mox    schedule 11.06.2012
comment
Спасибо вам за ссылки! Забавно: несколько минут назад я уже просматривал ваши статьи ;) Еще вопрос: правда ли, что DIA можно использовать для отладки неуправляемых, а также управляемых приложений? - person PuerNoctis; 11.06.2012
comment
Добро пожаловать! Как уже упоминалось, DIA основан на COM, что означает неуправляемый код. Конечно, вы можете использовать мосты для использования DIA из управляемого приложения. Поскольку управляемый код включает в себя полный исходный код и не использует символы PDB, я не думаю, что он подходит для отладки управляемых приложений. - person mox; 11.06.2012
comment
Ох, ладно. Тем временем я также нашел CLR Debugging API, который также предоставляет COM-интерфейсы для отладки управляемого приложения (вокруг интерфейсов ICorDebug). Еще раз спасибо за ваш опыт до сих пор! Теперь я знаю, как коррелируют DIA и DBGHELP :) - person PuerNoctis; 11.06.2012

Это то же самое. DbgHelp — это основной API, его можно использовать из C. DIA — это объектная модель COM поверх него, которая упрощает его использование и делает его доступным практически для любого языка. Это аббревиатура от Debug Interface Access с акцентом на «Доступ». Документация MSDN для него начинается здесь .

person Hans Passant    schedule 11.06.2012
comment
Спасибо! Есть ли серьезные недостатки от одного к другому, о которых стоит упомянуть? - person PuerNoctis; 11.06.2012
comment
Любую проблему, с которой вы столкнетесь в первую очередь, вы будете воспринимать как серьезный недостаток. Я не могу предположить, что это будет. - person Hans Passant; 11.06.2012
comment
Хорошо, достаточно честно, я думаю, что это имеет смысл :) - person PuerNoctis; 11.06.2012
comment
DIA — это объектная модель COM поверх нее, которая просто упрощает ее использование и делает ее доступной практически для любого языка. Действительно ли это так? Итак, если я читаю файлы pdb из C, я могу также использовать DbgHelp? Я использовал DIA, потому что считал его более мощным, но предпочел бы не использовать COM. - person Stewart Lynch; 06.11.2012
comment
Я проверил это, и это наоборот, DbgHelp на самом деле является оболочкой для DIA. см. msdn.microsoft.com/en-us/magazine/cc301692.aspx - person Stewart Lynch; 07.11.2012
comment
Нет, вы поняли это совсем наоборот. Как указано в статье, DbgHelp.dll является основным продуктом. В этом легко убедиться, запустив dumpbin.exe /exports на dbghelp.dll. - person Hans Passant; 07.11.2012
comment
оболочка COM не делает вещи проще, чем набор функций C! Именно из-за такого мышления отладка управляемого кода post-mortem — это такая питомка! - person gbjbaanb; 10.07.2014
comment
Очень странный репортаж. Если вам больше нравится интерфейс C, просто используйте его. Не то чтобы это вообще что-то делало для управляемого кода, DbgHelp и DIA предназначены для машинного кода. У управляемого кода есть собственный интерфейс, IDebugClient и др. Нет, не функции C :) - person Hans Passant; 10.07.2014