GNU/Linux >> Belajar Linux >  >> Linux

gdb - daftar sumber fungsi saat ini tanpa mengetik namanya

gdbtui dapat berguna untuk melihat sumber selama proses debug.


Saat Anda berhenti di fungsi, ketik bt untuk backtrace.Backtrace akan mencantumkan tumpukan saat ini. Elemen di atas, #0, biasanya merupakan fungsi yang Anda minati dan file sumber serta nomor baris juga dicantumkan.

Misalnya:

(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

Lihat http://www.chemie.fu-berlin.de/chemnet/use/info/gdb/gdb_7.html#SEC42 untuk info selengkapnya.

Selain itu, saat menyetel breakpoint, Anda dapat menentukan perintah yang akan berjalan setiap kali Anda mencapai breakpoint itu. Lihat http://www.chemie.fu-berlin.de/chemnet/use/info/gdb/gdb_6.html#SEC35

Jadi, jika Anda mengetahui berapa banyak baris dalam fungsi Anda, Anda dapat menetapkan perintah untuk mencantumkan semua baris sumber dari fungsi tersebut:

(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 adalah apa yang menarik.

Pada x86/x64 pointer saat ini ada di rip daftar jadi:

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

Contohnya dari cat perintah karena saya tidak punya apa-apa dengan info debug di tangan.


Perintah 'frame' menampilkan nama fungsi dan lokasi baris saat ini dan menyetel baris saat ini untuk daftar ke baris yang dapat dieksekusi saat ini.

set listsize 17
frame
list

mencantumkan 8 baris yang mengelilingi baris saat ini.


Linux
  1. Hapus garis konsol yang dicetak saat ini

  2. Dapatkan daftar nama fungsi dalam skrip shell

  3. Sejarah Bash tanpa nomor baris

  1. Daftar direktori tanpa garis miring /

  2. tidak dapat sumber skrip di direktori saat ini

  3. Menemukan sumber fungsi di zsh

  1. 11 panduan baris perintah Linux yang tidak boleh Anda lewatkan

  2. Terminal Prompt Menimpa Baris Saat Ini?

  3. Tetapkan nama pengirim dalam fungsi email