กำลังพิมพ์ตัวแปรโกลบอล / ตัวแปรโลคัลหรือไม่?


คำตอบ:


490

พิมพ์info variablesลงในรายการ "ชื่อตัวแปรกลางและแบบคงที่ทั้งหมด"

พิมพ์info localsไปยังรายการ "ตัวแปรท้องถิ่นของเฟรมสแต็กปัจจุบัน" (ชื่อและค่า) รวมถึงตัวแปรสแตติกในฟังก์ชันนั้น

พิมพ์info argsเพื่อแสดงรายการ "อาร์กิวเมนต์ของเฟรมสแต็กปัจจุบัน" (ชื่อและค่า)


2
@ KennyTM ชื่อตัวแปรสแตติกที่เอาต์พุตinfo variablesควรเป็นตัวแปรสแตติกภายในหน่วยการคอมไพล์นั้นใช่ไหม?
cpuer

3
@cpuer: ไม่จำเป็น มันจะแสดงเฉพาะชื่อในตารางสัญลักษณ์ ตัวอย่างเช่นกับ gcc บน Mac ตัวแปรแบบคงที่yจะถูกเปลี่ยนชื่อเป็นy.1913เมื่อรวบรวม
kennytm

1
@KennyTM ไม่ใช่ตัวแปรสแตติกภายในฟังก์ชันที่จัดเก็บแบบเดียวกับตัวแปรสแตติกนอกฟังก์ชัน (ในตารางสัญลักษณ์)
cpuer

2
@cpuer: พวกเขาจะถูกเก็บไว้ในลักษณะเดียวกัน แต่ชื่อสัญลักษณ์จะแตกต่างกัน พิจารณาคุณมีตัวแปรคงที่yในการทำงานfooและอื่น ๆในy barจะแยกพวกเขามีชื่อที่แตกต่างกันจะต้องกำหนดให้ทั้งสองy's
kennytm

1
@KennyTM ยิ่งไปกว่านั้นเป็นไปได้ไหมที่จะมีการประกาศและกำหนดตัวแปรตามลำดับ?
cpuer

110

ในกรณีที่คุณต้องการดูตัวแปรท้องถิ่นของฟังก์ชั่นการโทรใช้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) 

4
( select-frameสามารถย่อเป็นselได้หรือใช้frame/ fซึ่งพิมพ์เฟรมด้วย)
user202729

27

นอกจากนี้เนื่องจากinfo localsไม่แสดงอาร์กิวเมนต์ของฟังก์ชันที่คุณใช้

(gdb) info args

ตัวอย่างเช่น:

int main(int argc, char *argv[]) {
    argc = 6*7;    //Break here.
    return 0;
}

argcและจะไม่ถูกแสดงโดยargv info localsข้อความจะเป็น "ไม่มีคนในท้องถิ่น"

: การอ้างอิงคำสั่งข้อมูลชาวบ้าน


แหล่งอ้างอิงเดียวอยู่ที่นี่: sourceware.org/gdb/current/onlinedocs/gdb/Frame-Info.html
Johan Boulé
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.