GNU/Linux >> Linux の 問題 >  >> Linux

gdb - 名前を入力せずに現在の関数のソースを一覧表示する

gdbtui は、デバッグ中にソースを表示するのに役立ちます。


関数型 bt で停止した場合 backtrace.Backtrace は現在のスタックを一覧表示します。一番上の要素 #0 は通常、関心のある関数であり、ソース ファイルと行番号もリストされています。

例:

(gdb) bt
#0  myClass::EntityTypeStruct::readAttributes (this=0x7fffd00066e0, buf=0x7fffd0006020 "", len=48)
    at /team/project/src/EntityTypeStruct.cc:55
#1  0x000000000044ca86 in workerThread (ts=0x7fffea71dcc0)
    at /team/project/src/threads/workerThread.cc:219
#2  0x00007ffff775e9d1 in start_thread () from /lib64/libpthread.so.0
#3  0x00007ffff6c07b5d in clone () from /lib64/libc.so.6

詳細については、http://www.chemie.fu-berlin.de/chemnet/use/info/gdb/gdb_7.html#SEC42 を参照してください。

また、ブレークポイントを設定すると、コマンドを指定できます そのブレークポイントに到達するたびに実行されます。 http://www.chemie.fu-berlin.de/chemnet/use/info/gdb/gdb_6.html#SEC35 を参照

したがって、関数の行数がわかっている場合は、関数のすべてのソース行を一覧表示するコマンドを設定できます:

(gdb) break myClass::EntityTypeStruct::readAttributes
Breakpoint 1 at 0x61ec3b: file /team/project/src/EntityTypeStruct.cc, line 38.
(gdb) commands 1
list 38,104
end

(gdb) help list
List specified function or line.
With no argument, lists ten more lines after or around previous listing.
"list -" lists the ten lines before a previous ten-line listing.
One argument specifies a line, and ten lines are listed around that line.
Two arguments with comma between specify starting and ending lines to list.
Lines can be specified in these ways:
  LINENUM, to list around that line in current file,
  FILE:LINENUM, to list around that line in that file,
  FUNCTION, to list around beginning of that function,
  FILE:FUNCTION, to distinguish among like-named static functions.
  *ADDRESS, to list around the line containing that address.
With two args if one is empty it stands for ten lines away from the other arg.

*ADDRESS

x86/x64 では、現在のポインターは rip にあります 登録:

(gdb) list *$pc
0x7ffff7b018a0 is at ../sysdeps/unix/syscall-template.S:82.
77  in ../sysdeps/unix/syscall-template.S

例は cat からのものです 手元にデバッグ情報が何もないので、コマンドを実行してください。


'frame' コマンドは、関数名と現在の行の場所を表示し、list の現在の行を現在の実行可能な行に設定します。

set listsize 17
frame
list

現在の行を囲む 8 行を一覧表示します。


Linux
  1. 11Linuxコマンドラインガイドなしではいけない

  2. 名前がファイルリストの行と一致しないディレクトリ内のすべてのファイルを削除しますか?

  3. `source`の後にコマンド名を入力するとオートコンプリートが機能しないのはなぜですか?

  1. 現在印刷されているコンソール行を消去します

  2. シェル スクリプトで関数名のリストを取得する

  3. 行番号のない Bash 履歴

  1. 末尾のスラッシュのないディレクトリのリスト /

  2. 現在のディレクトリでスクリプトを入手できません

  3. GDB がソース ファイルをロードしない