모든 전역 변수 / 지역 변수를 인쇄 하시겠습니까?


337

모든 전역 변수 / 로컬 변수를 인쇄하려면 어떻게해야합니까? gdb에서 가능합니까?

답변:


490

info variables"모든 전역 및 정적 변수 이름"을 나열하려면 입력 하십시오.

info locals해당 함수의 정적 변수를 포함하여 "현재 스택 프레임의 로컬 변수"(이름 및 값)를 나열하려면 입력 하십시오.

info args"현재 스택 프레임의 인수"(이름 및 값)를 나열하려면 입력 하십시오.


2
@KennyTM, 출력의 정적 변수 이름은 info variables해당 컴파일 단위 내의 정적 변수 여야합니다.
cpuer

3
@cpuer : 반드시 그런 것은 아닙니다. 심볼 테이블에는 이름 만 표시됩니다. 예를 들어 Mac에서 gcc를 사용하면 정적 변수 y이름이 y.1913컴파일시 이름이 바뀝니다 .
kennytm

1
@ KennyTM, 함수 내부의 정적 변수가 함수 외부의 정적 변수와 동일한 방식으로 저장되지 않습니까 (기호 테이블에서)?
cpuer

2
@cpuer : 그것들은 같은 방식으로 저장되지만 심볼 이름은 다를 것입니다. 정적 변수가 고려 y함수 foo와 다른 y의를 bar. 구별하기 위해 두 이름에 다른 이름을 지정해야합니다 y.
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;
}

argcargv가 표시되지 않습니다 info locals. 메시지는 "No locals"입니다.

참조 : 정보 지역 주민이 명령 .


진정한 참고 자료는 다음과 같습니다. sourceware.org/gdb/current/onlinedocs/gdb/Frame-Info.html
Johan Boulé
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.