ฉันจะพิมพ์ตัวแปรโกลบอล / ตัวแปรโลคัลทั้งหมดได้อย่างไร? เป็นไปได้ใน 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ควรเป็นตัวแปรสแตติกภายในหน่วยการคอมไพล์นั้นใช่ไหม?