은 가정하자 내가 가지고 GDB와 프레임검사 발신자는
gcc -g c.c
가, 내가 (때문에 abort()
에 의해 제기 SIGABRT
에) 코어 덤프를 얻을 수 있습니다이 실행하는 I 다음을 사용하여 디버그 할 수 있습니다.
어떻게하면 gdb
발을 인쇄 할 수 있습니까? 이 문맥에서 a
과 b
의 ues?
은 가정하자 내가 가지고 GDB와 프레임검사 발신자는
gcc -g c.c
가, 내가 (때문에 abort()
에 의해 제기 SIGABRT
에) 코어 덤프를 얻을 수 있습니다이 실행하는 I 다음을 사용하여 디버그 할 수 있습니다.
어떻게하면 gdb
발을 인쇄 할 수 있습니까? 이 문맥에서 a
과 b
의 ues?
여기에 특별히 관심이 프레임로 이동하여 a
및 b
값을 얻을 수있는 또 다른 방법 다음 info locals
당신에게 가치를 줄 것이다. a.out
가 코드와 함께 컴파일되었습니다. (프레임 2는 관심있는 내용입니다 (예 : main()
). 또한 프레임 2 번 print
을 사용할 수 있습니다
$ gdb ./a.out core
[ removed some not-so-interesting info here ]
Reading symbols from ./a.out...done.
[New LWP 14732]
Core was generated by `./a.out'.
Program terminated with signal SIGABRT, Aborted.
#0 __GI_raise ([email protected]=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 __GI_raise ([email protected]=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1 0x00007fac16269f5d in __GI_abort() at abort.c:90
#2 0x00005592862f266d in main() at f.c:7
(gdb) frame 2
#2 0x00005592862f266d in main() at f.c:7
7 abort();
(gdb) info locals
a = 2
b = 3
(gdb) q
:
(gdb) print a
$1 = 2
(gdb) print b
$2 = 3
디버그 기호 -g
으로 컴파일 했습니까? 백 트레이스의 경우 명령은 bt
이어야하며 bt full
을 전체 백 트레이스로 사용할 수도 있습니다.
더 많은 정보를 정기적으로 : https://sourceware.org/gdb/onlinedocs/gdb/Backtrace.html
고마워요! 'bt full'은 가치를 보여줍니다! 이 문제에 대해보다 세분화 된 방법이 나오면 받아들이 기 전에 조금 기다릴 것입니다. – PSkocik
감사합니다. 이것이 제가 찾고 있던 것입니다. 나는 gdb를 조금 더 잘 배우려고 노력할 것이다. – PSkocik