2012-09-01 43 views
5

Tengo una llamada de función de biblioteca de tercera parte dispersa en muchos lugares en mi ejecutable. Mi ejecutable está construido usando símbolos de depuración, pero la biblioteca de terceros no tiene los símbolos de depuración, por lo tanto, no puedo colocar un punto de interrupción en la función. Quiero poner un punto de interrupción siempre que se llame a la función de biblioteca para examinar la pila de llamadas. ¿Cómo puedo establecer un punto de interrupción en todas las invocaciones de una llamada a función de biblioteca dentro de mi ejecutable?¿Cómo establecer un punto de interrupción en gdb para todas las invocaciones de una función?

+0

Parece que el enlazador debería conocer la asignación de nombre y dirección de la función incluso sin símbolos de depuración, por lo que no puedo entender por qué no se puede poner un punto de interrupción. ¿Estás seguro de que no está en una biblioteca compartida que se carga después de intentar colocar el punto de interrupción? –

Respuesta

4

creo que la única manera de hacerlo es:

  • encontró ninguna llamada de esta función en el código;
  • crear un punto de interrupción en esa línea;
  • ejecuta el depurador y se detiene allí;
  • escriba en gdb nexti para acceder a la primera instrucción de función;
  • obtener un eip actual que apuntará al comienzo de esa función;
  • crear un nuevo punto de interrupción en la dirección señalada por eip;
Cuestiones relacionadas