ฉันจะพิมพ์ตัวแปรโกลบอล / ตัวแปรโลคัลทั้งหมดได้อย่างไร? เป็นไปได้ใน gdb?
ฉันจะพิมพ์ตัวแปรโกลบอล / ตัวแปรโลคัลทั้งหมดได้อย่างไร? เป็นไปได้ใน gdb?
คำตอบ:
พิมพ์info variables
ลงในรายการ "ชื่อตัวแปรกลางและแบบคงที่ทั้งหมด"
พิมพ์info locals
ไปยังรายการ "ตัวแปรท้องถิ่นของเฟรมสแต็กปัจจุบัน" (ชื่อและค่า) รวมถึงตัวแปรสแตติกในฟังก์ชันนั้น
พิมพ์info args
เพื่อแสดงรายการ "อาร์กิวเมนต์ของเฟรมสแต็กปัจจุบัน" (ชื่อและค่า)
y
จะถูกเปลี่ยนชื่อเป็นy.1913
เมื่อรวบรวม
y
ในการทำงานfoo
และอื่น ๆในy
bar
จะแยกพวกเขามีชื่อที่แตกต่างกันจะต้องกำหนดให้ทั้งสองy
's
ในกรณีที่คุณต้องการดูตัวแปรท้องถิ่นของฟังก์ชั่นการโทรใช้select-frame
ก่อนinfo locals
เช่น:
(gdb) bt
#0 0xfec3c0b5 in _lwp_kill () from /lib/libc.so.1
#1 0xfec36f39 in thr_kill () from /lib/libc.so.1
#2 0xfebe3603 in raise () from /lib/libc.so.1
#3 0xfebc2961 in abort () from /lib/libc.so.1
#4 0xfebc2bef in _assert_c99 () from /lib/libc.so.1
#5 0x08053260 in main (argc=1, argv=0x8047958) at ber.c:480
(gdb) info locals
No symbol table info available.
(gdb) select-frame 5
(gdb) info locals
i = 28
(gdb)
select-frame
สามารถย่อเป็นsel
ได้หรือใช้frame
/ f
ซึ่งพิมพ์เฟรมด้วย)
นอกจากนี้เนื่องจากinfo locals
ไม่แสดงอาร์กิวเมนต์ของฟังก์ชันที่คุณใช้
(gdb) info args
ตัวอย่างเช่น:
int main(int argc, char *argv[]) {
argc = 6*7; //Break here.
return 0;
}
argc
และจะไม่ถูกแสดงโดยargv
info locals
ข้อความจะเป็น "ไม่มีคนในท้องถิ่น"
info variables
ควรเป็นตัวแปรสแตติกภายในหน่วยการคอมไพล์นั้นใช่ไหม?