2011-09-30 10 views
6

Estoy depurando un problema, y ​​quiero interrumpir cada llamada de método que tiene un objeto específico como el parámetro 'this'. ¿Es esto posible en GDB?Descanso de GDB en la llamada a la función de objeto

+0

¿Te refieres a una dirección específica? No puede obtener el tipo de objeto desde este puntero. – Pubby

+0

Tendría que usar un punto de interrupción condicional. Esos existen, pero no tengo idea de cómo configurarlos. gdb es en gran medida un misterio para mí, y los diversos guis a su alrededor hacen más por oscurecer que hacerlo accesible. – Omnifarious

+0

Me refiero a una dirección específica: tengo un objeto que se está quedando, y quiero saber cómo se llama. –

Respuesta

0

Este parámetro solo debe ser el método que se incluye en la clase. Entonces solo deberías establecer puntos de interrupción para todos los métodos de la clase que estás viendo. Sin embargo, no estoy seguro de que haya una manera simple de hacerlo.

+0

Supuse que OP tenía un método específico en mente. Pero sospecho que tu interpretación es más correcta. ¿Cómo establecerías un punto de interrupción para un solo método? – Omnifarious

5

Es fácil. Puede usar un comando como b A::a if (this==0x28ff1e).

+0

¿Es posible especificar un comodín en lugar de 'A :: a' que coincida con los nombres de todos los métodos en la clase' A'? – Omnifarious

+0

No conozco ninguna forma de usar comodines en gdb, tal vez necesite un programa para generar comandos para establecer descansos. – user685684

+5

@NathanielFlath - Sabes que me pregunto si el comando gdb 'rbreak' podría no hacer lo que quieras ... – Omnifarious

0

Quiero romper en cada llamada al método que tiene un objeto específico como el 'este' parámetro

Esto significa que usted quiere romper en cada función miembro de una clase particular para el cual el objeto ha sido instanciado.

Digamos que por conveniencia de que todas las funciones miembro se definen en un archivo CPP en particular, como myclass_implementation.cpp

Puede usar GDB para aplicar punto de interrupción en cada función dentro myclass_implementation.cpp esta manera:

rbreak myclass_implementation.cpp:. 

Let de supongamos que desea romper algunas funciones específicas, como las funciones get que comienzan con Get, luego puede usar gdb para aplicar puntos de interrupción de esta manera:

rbreak myclass_implementation.cpp:Get* 
Cuestiones relacionadas