2008-10-02 29 views
11

Tengo dos sobrecargas de un C++ función y me gustaría establecer un punto de interrupción en una de ellas:Windbg: ¿Cómo establecer un punto de interrupción en una de las sobrecargas de una función de 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' 

Heck no habría problema con el establecimiento de puntos de interrupción en todas las sobrecargas, pero parece que no puede averiguar Cómo:

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*' 

Respuesta

7

Probar:

bu 0xff3c6100 

Si no recuerdo mal, WinDBG permite establecer puntos de interrupción por dirección también.

4

¿Has probado "bm myexe! Displayerror *"?

2
bm myexe!displayerror 

Esto establecer puntos de interrupción todas las sobrecargas, de las que usa bc para borrar los que no desea

bc 1-3 

O simplemente les desactivar

bd 1-3 

El problema con bm es que los puntos de ruptura que produce a veces no se pueden evaluar y desencadenan un corte. Molesto a veces

3

pb @@ (MyClass :: MyMethod) descanso en métodos (útil si se sobrecarga el mismo método y por lo tanto presente en varias direcciones)

1

Busque su DLL para todo punto de entrada que corresponden a su símbolo

x myexe!displayerror 

esta es la salida de todos los símbolos que coincidan con la cadena de búsqueda y sus puntos de entrada, a continuación, establecer el punto de interrupción en la dirección

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

esto establecerá un breakp específica una vez que se golpea esa dirección, o establece bp contra la otra dirección. Se puede establecer el punto de interrupción a acaba de golpear una vez, borrar el punto de ruptura y salida

bp /1 ff3c6100 

y también se puede ejecutar comandos como el volcado de la pila de llamadas, las variables y continuar:

bp ff3c6100 "kb;dv;g" 

Usted también puede simplemente abra su código fuente cuando WinDbg esté conectado, navegue hasta la línea de código en la que desea establecer el punto de interrupción y presione F9 (lo mismo que haría con Visual Studio), se pausará por un tiempo antes de establecer un punto de interrupción en esa línea, esto supone que tienes acceso al código fuente.

Cuestiones relacionadas