
Actualmente estoy teniendo problemas para depurar openjdk en Trusty Tahr. Ya lo instalé opejdk-7-jdk
y openjdk-7-dbg
. Cuando lo emito, gdb java
veo que lee los símbolos correctamente, pero cuando le pido que enumere el código, se queja de que no se encuentra main.c. Me las arreglo para que la depuración funcione en CentOS y podría enumerar el archivo main.c pero quiero que funcione en Ubuntu ya que es mi distribución principal.
Salida bruta:
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from java...Reading symbols from /usr/lib/debug//usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java...done.
done.
(gdb) l
85 ../../../../src/share/bin/main.c: No such file or directory.
(gdb)
¿Necesito hacer algo adicional para colocar main.c donde se pueda encontrar?
Respuesta1
Debe modificar source path
el utilizado por gdb para encontrar el archivo fuente.
De acuerdo amanual del gdb:
Los programas ejecutables a veces no registran los directorios de los archivos fuente a partir de los cuales fueron compilados, solo los nombres. Incluso cuando lo hagan, los directorios podrían moverse entre la compilación y la sesión de depuración. GDB tiene una lista de directorios para buscar archivos fuente; esto se llama ruta de origen.
Primero debe averiguar dónde se encuentra el archivo fuente en su sistema:
locate main.c
y luego usar dir dirname
el comando para:
Agregue el nombre de directorio al frente de la ruta de origen. Se pueden asignar varios nombres de directorio a este comando, separados por ':' (';' en MS-DOS y MS-Windows, donde ':' suele aparecer como parte de los nombres absolutos de archivos) o espacios en blanco. Puede especificar un directorio que ya esté en la ruta de origen; esto lo hace avanzar, por lo que GDB lo busca antes.
Lea atentamente el enlace del manual de gdb anterior para saber cómo se source path
utiliza.