perintah set backtrace past-entry
Menentukan apakah GDB akan mencoba membongkar (unwind) frame-frame di bawah titik masuk modul dalam backtrace.
Sintaks
set backtrace past-entry off
show backtrace past-entry
Mode
- on
- Dalam mode ini, GDB akan mencoba untuk membongkar dan menampilkan frame-frame di bawah titik masuk (entry point). Mode ini berguna saat debugging loader kustom dan kode tingkat sistem lainnya. Perhatikan bahwa mode ini tidak akan berpengaruh kecuali jika set backtrace past-main diatur ke on.
- off
- Dalam mode ini, GDB tidak akan menyembunyikan frame-frame di bawah titik masuk.
Nilai Default
Nilai default untuk variabel backtrace past-entry adalah off.
Catatan
Perhatikan bahwa jika Anda mengatur variabel backtrace past-entry ke on, tanpa mengatur backtrace past-main ke on, GDB akan menghentikan backtrace pada main() dan tidak akan menampilkan titik masuk atau frame-frame di bawahnya.
Contoh
Pada contoh ini, kami akan melakukan debugging program sederhana yang terdiri dari 2 fungsi:
#include
void func()
{
printf("Hello from func()\n");
}
int main(int argc, char *argv[])
{
func();
return 0;
}
Contoh berikut menunjukkan bagaimana perintah set backtrace past-main memengaruhi output dari perintah backtrace:
GNU gdb (GDB) 7.5
Copyright (C) 2012 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 "i686-pc-mingw32".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from C:\MinGW32\bin\0.exe...done.
(gdb) break func
Breakpoint 1 at 0x4013b6: file 0.cpp, line 5.
(gdb) run
Starting program: C:\MinGW32\bin\0.exe
[New Thread 12304.0x3238]
Breakpoint 1, func () at 0.cpp:5
5 printf("Hello from func()\n");
(gdb) backtrace
#0 func () at 0.cpp:5
#1 0x004013d4 in main (argc=1, argv=0x9c17f0) at 0.cpp:10
(gdb) show backtrace past-entry
Whether backtraces should continue past the entry point of a program is off.
(gdb) set backtrace past-main on
(gdb) backtrace
#0 func () at 0.cpp:5
#1 0x004013d4 in main (argc=1, argv=0x9c17f0) at 0.cpp:10
#2 0x004010fd in __mingw_CRTStartup ()
#3 0x00401295 in mainCRTStartup ()
(gdb) set backtrace past-entry on
(gdb) backtrace
#0 func () at 0.cpp:5
#1 0x004013d4 in main (argc=1, argv=0x9c17f0) at 0.cpp:10
#2 0x004010fd in __mingw_CRTStartup ()
#3 0x00401295 in mainCRTStartup ()
#4 0x763633aa in KERNEL32!BaseCleanupAppcompatCacheSupport ()
from C:\Windows\syswow64\kernel32.dll
#5 0x0028ffd4 in ?? ()
#6 0x76fc9f72 in ntdll!RtlpNtSetValueKey ()
from C:\Windows\system32\ntdll.dll
#7 0x7efde000 in ?? ()
#8 0x76fc9f45 in ntdll!RtlpNtSetValueKey ()
from C:\Windows\system32\ntdll.dll
#9 0x00401280 in _gnu_exception_handler@4 ()
#10 0xffffffff in ?? ()
#11 0x77057428 in wcstombs () from C:\Windows\system32\ntdll.dll
#12 0x00000000 in ?? ()
Perhatikan bahwa frame-frame di bawah mainCRTStartup() tidak valid karena stack di bawah frame mainCrtStartup() tidak mengandung alamat pengembalian aktual dan tebakan yang dilakukan oleh GDB menghasilkan hasil yang tidak valid.