2011-02-01 13 views

Respuesta

18

Utilice el comando info source para obtener información para el marco de pila actual.

Aquí es un ejemplo de su producción:

(gdb) info source 
Current source file is /build/gtk+2.0-LJ3oCC/gtk+2.0-2.24.30/modules/input/gtkimcontextxim.c 
Located in /home/sashoalm/Desktop/compile/gtk+2.0-2.24.30/modules/input/gtkimcontextxim.c 
Contains 1870 lines. 
Source language is c. 
Producer is GNU C11 5.3.1 20160225 -mtune=generic -march=i686 -g -g -O2 -O2 -fstack-protector-strong -fPIC -fstack-protector-strong. 
Compiled with DWARF 2 debugging format. 
Does not include preprocessor macro info.
+0

Este comando muestra información sobre el punto de interrupción * actual *, y en ocasiones lleva mucho tiempo alcanzar un punto de interrupción en una función específica. En este caso, puede ser útil forzar un salto a esa función con 'jump '. – mMontu

1

En Python scripting

Para aprender Python scripting, o si desea ver sólo la ruta completa y nada más:

class Curpath(gdb.Command): 
    """ 
Print absolute path of the current file. 
""" 
    def __init__(self): 
     super().__init__('curpath', gdb.COMMAND_FILES) 
    def invoke(self, argument, from_tty): 
     gdb.write(gdb.selected_frame().find_sal().symtab.fullname() + os.linesep) 
Curpath() 

Uso:

curpath 
0

Excelente respuesta de Ciro Santill. Sin embargo, el script necesitaba una pequeña corrección para trabajar con mi gdb 8.0.1.

También lo cambié para copiar el texto al portapapeles para que pueda usarlo en vim directamente. Funciona muy bien con el complemento file_line.vim. Este es un ejemplo del contenido del portapapeles producido por el guión:

/home/ops1/projects/test01/main.cpp:5 

El guión es el siguiente:

import pyperclip 

class Clippath (gdb.Command): 
    """print absolute path""" 
    def __init__(self): 
     super(Clippath, self).__init__("clippath", gdb.COMMAND_USER) 

    def invoke(self, arg, from_tty): 
     symtabline = gdb.selected_frame().find_sal() 
     pyperclip.copy(symtabline.symtab.fullname() + ":" + str(symtabline.line)) 

Clippath() 

Éstos son los pasos para hacer que todo funcione:

  1. Instalar pyperclip biblioteca python sudo zypper en python3-pyperclip
  2. Guarde el script anterior en un archivo, digamos file-path.py y cópielo a ~/.gdb
  3. actualización ~/.gdbinit con la adición de las siguientes líneas: source ~/.gdb/file-path.py
  4. Ahora puede copiar la ruta y la línea en el portapapeles con clippath en GDB

Y lea más sobre GDB Python API - link

Cuestiones relacionadas