Windbg: Как установить точку останова на одну из перегрузок функции C ++? - PullRequest
11 голосов
/ 02 октября 2008

У меня есть две перегрузки функции c ++, и я хотел бы установить точку останова для одной из них:

0:000> bu myexe!displayerror
Matched: 00000000`ff3c6100 myexe!displayError (int, HRESULT, wchar_t *)
Matched: 00000000`ff3c60d0 myexe!displayError (int, HRESULT)
Ambiguous symbol error at 'myexe!displayerror'

Черт, я бы хорошо с установкой точек останова на всех перегрузках, но не могу понять, как:

0:000> bu myexe!displayerror*
Matched: 00000000`ff3c6100 myexe!displayError (int, HRESULT, wchar_t *)
Matched: 00000000`ff3c60d0 myexe!displayError (int, HRESULT)
Ambiguous symbol error at 'myexe!displayerror*'

Ответы [ 5 ]

7 голосов
/ 02 октября 2008

Попробуйте:

bu 0xff3c6100

Если я правильно помню, WinDbg также позволяет устанавливать точки останова по адресу.

4 голосов
/ 23 декабря 2008

Вы пробовали "bm myexe! Displayerror *"?

3 голосов
/ 25 января 2011

bp @@ (MyClass :: MyMethod) перерыв в методах (полезно, если один и тот же метод перегружен и, следовательно, присутствует по нескольким адресам)

2 голосов
/ 14 ноября 2010
bm myexe!displayerror

Это установит контрольные точки всех всех перегрузок, чем вы используете bc, чтобы очистить те, которые вам не нужны

bc 1-3

Или просто отключить их

bd 1-3

Проблема с bm заключается в том, что порождаемые им точки останова иногда не могут быть оценены и вызывают прерывание. Раздражает иногда.

1 голос
/ 10 марта 2012

Поиск в вашей dll для всех точек входа, соответствующих вашему символу

x myexe!displayerror

это выведет все символы, соответствующие строке поиска и их точкам входа, затем установит точку останова на адресе

bp ff3c6100 // for myexe!displayError (int, HRESULT, wchar_t *)

Это установит определенную точку останова, когда будет достигнут этот адрес, или вы установите bp против другого адреса. Вы можете установить точку останова, чтобы просто ударить один раз, очистить точку останова и выйти

bp /1 ff3c6100

и вы также можете выполнять такие команды, как сброс стека вызовов, переменных и продолжение:

bp ff3c6100 "kb;dv;g"

Вы также можете просто открыть свой исходный код, когда присоединен WinDbg, перейти к строке кода, на которой вы хотите установить точку останова, и нажать F9 (так же, как вы это делали бы в Visual Studio), она на некоторое время остановится перед установка точки останова в этой строке предполагает, что у вас есть доступ к исходному коду.

...