Erro de lista openjdk-7 gdb: “main.c: Esse arquivo ou diretório não existe”

Erro de lista openjdk-7 gdb: “main.c: Esse arquivo ou diretório não existe”

Atualmente estou lutando para depurar o openjdk no Trusty Tahr. Já instalei opejdk-7-jdke openjdk-7-dbg. Quando emito gdb javavejo que ele lê os símbolos corretamente, mas quando peço para listar o código ele reclama que main.c não foi encontrado. Consegui fazer a depuração funcionar no CentOS e poderia listar o arquivo main.c, mas quero que funcione no Ubuntu, pois é minha distro principal.

Saída 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) 

Preciso fazer algo extra para colocar o main.c onde ele pode ser encontrado?

Responder1

Você deve modificar source patho usado pelo gdb para descobrir o arquivo de origem.

De acordo commanual do gdb:

Às vezes, os programas executáveis ​​não registram os diretórios dos arquivos de origem dos quais foram compilados, apenas os nomes. Mesmo quando isso acontece, os diretórios podem ser movidos entre a compilação e a sessão de depuração. O GDB possui uma lista de diretórios para procurar arquivos de origem; isso é chamado de caminho de origem.

Você primeiro precisa descobrir onde estão os arquivos de origem em seu sistema:

 locate main.c

e então usar dir dirnameo comando para:

Adicione o diretório dirname à frente do caminho de origem. Vários nomes de diretório podem ser atribuídos a este comando, separados por ':' (';' no MS-DOS e MS-Windows, onde ':' geralmente aparece como parte de nomes de arquivos absolutos) ou espaço em branco. Você pode especificar um diretório que já esteja no caminho de origem; isso avança, então o GDB pesquisa mais cedo.

Leia atentamente o link do manual do gdb acima para saber como ele source pathé usado.

informação relacionada