In tất cả các biến toàn cục / biến cục bộ?


337

Làm thế nào tôi có thể in tất cả các biến toàn cục / biến cục bộ? Điều đó có thể có trong gdb không?

Câu trả lời:


488

Nhập info variablesvào danh sách "Tất cả các tên biến toàn cục và tĩnh".

Nhập info localsđể liệt kê "Biến cục bộ của khung ngăn xếp hiện tại" (tên và giá trị), bao gồm các biến tĩnh trong hàm đó.

Nhập info argsđể liệt kê "Đối số của khung ngăn xếp hiện tại" (tên và giá trị).


2
@ KennyTM, tên biến tĩnh trong đầu ra info variablesphải là biến tĩnh trong đơn vị biên dịch đó, phải không?
cpuer

3
@cpuer: Không nhất thiết. Nó chỉ hiển thị tên trong bảng biểu tượng. Chẳng hạn, với gcc trên Mac, một biến tĩnh yđược đổi tên thành y.1913biên dịch.
kennytm

1
@KennyTM, không phải các biến tĩnh bên trong hàm được lưu trữ giống như các biến tĩnh bên ngoài hàm (trong bảng ký hiệu)?
cpuer

2
@cpuer: Chúng được lưu trữ theo cùng một cách nhưng tên biểu tượng sẽ khác nhau. Xem xét bạn có một biến tĩnh ytrong chức năng foovà khác ytrong bar. Để phân biệt chúng, một tên khác phải được gán cho hai y.
kennytm

1
@KennyTM, hơn nữa, có thể đến nơi một biến được khai báo và định nghĩa tương ứng không?
cpuer

110

Trong trường hợp bạn muốn xem các biến cục bộ của hàm gọi, hãy sử dụng select-frametrướcinfo locals

Ví dụ:

(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-framecó thể được viết tắt là sel. Sử dụng khác frame/ f, cũng in khung)
user202729

27

Ngoài ra, vì info localskhông hiển thị các đối số cho hàm bạn đang sử dụng, hãy sử dụng

(gdb) info args

Ví dụ:

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

argcargvsẽ không được hiển thị bởi info locals. Thông điệp sẽ là "Không có người dân địa phương."

Tham khảo: thông tin lệnh địa phương .


Một tài liệu tham khảo thực sự có ở đây: sourceware.org/gdb/cản/onlinesocs/gdb/Frame-Info.html
Johan Boulé
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.