Точка останова на API, доступном из COM-интерфейса

Допустим, это один интерфейс

interface Ifoo
{
   HRESULT foo();
};

который является частью бинарной dll. У меня нет исходного кода для этого.

Могу ли я поставить точку останова на foo() API, доступном из интерфейса Ifoo этой двоичной dll с помощью Windbg?

Я знаю, что мы можем поставить точки останова на бинарные dll, используя windbg, но используя COM, я не уверен.


person anand    schedule 11.06.2009    source источник


Ответы (2)


Независимо от того, используете ли вы COM или нет, вы не можете ставить точки останова на интерфейсе: интерфейс никогда не выполняется, поэтому нет способа «сломать» интерфейс.

Однако, если вы знаете, что Ifoo реализован в CFoo, вы, конечно, можете установить точку останова на CFoo::foo.

person Johannes Passing    schedule 11.06.2009

Что ж, спасибо за указание, я действительно имел в виду установку точки останова на реализацию foo.

Так я узнал. В моем случае я хотел поставить точку останова на одну из системных dll Windows.

Итак, я запускал команды на Windbg как

> x  dllname*!foo*

Он дал мне список реализаций foo в dll с именем, соответствующим dllname.

подобно

7331122 dllname!CFoo::foo

Затем, используя этот адрес, я ставлю точки останова

bp 7331122

Вы можете просмотреть установленные точки останова с помощью команды

 >bl
person anand    schedule 12.06.2009