2011-02-01 14 views

答えて

18

info sourceコマンドを使用して、現在のスタックフレームの情報を取得します。 Pythonスクリプトを学ぶためにPythonスクリプトで

(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

このコマンドは、* current *ブレークポイントに関する情報を表示し、特定の関数でブレークポイントをヒットするのに時間がかかることがあります。この場合、 'jump 'でその関数にジャンプさせると便利です。 – mMontu

1

、またはあなただけの完全なパスと他には何も表示したい場合:ここで

は、その出力の一例である

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() 

使用法:

curpath 
0

Ciro Santillからの優秀な回答。しかし、スクリプトはgdb 8.0.1で動作するには小さな修正が必要でした。

テキストをクリップボードにコピーするように変更したので、すぐにvimで使用することができます。 file_line.vimプラグインでうまく動作します。これは、スクリプトによって生成さクリップボードの内容の一例です:

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

スクリプトは以下の通りです:

  1. pyperclipをインストールします。ここでは

    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() 
    

    はそれをすべてを動作させるためにステップですPythonライブラリ sudo zypper in python3-pyperclip

  2. 上記のスクリプトをファイルに保存して、file-path.pyと入力して〜/ .gdbにコピーします次の行を追加して
  3. アップデートは〜/ .gdbinit: ソース〜/ .gdb/
  4. は今、あなたはGDBにclippathでクリップボードへのパスと行をコピーすることができfile-path.py

そして、GDB Python APIの詳細を参照してください。link

関連する問題