2009-10-19 30 views
17

Tengo un proyecto de aplicación Eclipse CDT C++ que utiliza una biblioteca compartida. Esta biblioteca está compilada con información de depuración y su fuente está disponible en la ruta correcta.Depuración con Eclipse CDT y GDB

Ahora trato de depurar mi aplicación con Eclipse y GDB. Si pongo puntos de interrupción en el código fuente de mi aplicación, todo está bien. Luego abro un archivo fuente de la biblioteca compartida incluida y coloco el punto de interrupción allí. Al iniciar la sesión de depuración, se me advierte que "No hay ningún archivo de origen denominado xxx.cpp en los símbolos cargados" y la ejecución no se detiene en ese momento. Si pongo el mismo punto de interrupción en el mismo archivo cuando la sesión de depuración ya se está ejecutando, todo funciona bien. ¿Qué está mal?

Gracias por su ayuda.

Respuesta

7

He encontrado un tema que puede responder a esta pregunta: Why does Eclipse CDT ignore breakpoints?

Podría ser que usted está tratando de establecer puntos de interrupción en una biblioteca compartida que no se ha cargado todavía. Eso no funcionará en hasta que la biblioteca se haya cargado. gdb más nuevos permiten establecer puntos de interrupción diferidos, pero puede que no (todavía) sea compatible con CDT. Una solución alternativa es establecer un punto de interrupción en un lugar que es disponible desde el principio que se alcanzará cuando la biblioteca compartida en la pregunta ya está cargada. A continuación, configure el otro punto de interrupción en la biblioteca compartida. Ahora debería funcionar. Es un un poco más tedioso, pero generalmente funciona.

¿podría ser el answear? Estoy usando CDT v6.0.0.200906161748 y GDB v6.8

7

Tuve el mismo problema al intentar establecer puntos de interrupción en los complementos de Qt (que se basan en DLL de Windows, s).

Encontré esta discusión y la solución funcionó perfectamente para mí, aunque estoy usando una versión más nueva de Eclipse que tú, parece ser el mismo problema.

http://www.eclipse.org/forums/index.php?t=msg&goto=555294&S=2aed4155e654e34cb2e84a6fb23de9bf#msg_555294

Básicamente, se trata de utilizar un protocolo de GDB mayores que apoya los puntos de interrupción diferidos. Usando el "Lanzador de procesos de creación estándar" en lugar de "GDB (DSF) Crear iniciador de procesos" desde Configuraciones de depuración y obtengo todos mis puntos de interrupción DLL establecidos ahora.

Versión: Helios lanzamiento Build ID: 20100617-1415

CDT y GDB versión 7.0.0.

¡Buena suerte!

Cuestiones relacionadas