2017-11-30 1 views
3

은 가정하자 내가 가지고 GDB와 프레임검사 발신자는

gcc -g c.c 

가, 내가 (때문에 abort()에 의해 제기 SIGABRT에) 코어 덤프를 얻을 수 있습니다이 실행하는 I 다음을 사용하여 디버그 할 수 있습니다.

어떻게하면 gdb 발을 인쇄 할 수 있습니까? 이 문맥에서 ab의 ues?

답변

2

여기에 특별히 관심이 프레임로 이동하여 ab 값을 얻을 수있는 또 다른 방법 다음 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 
+0

감사합니다. 이것이 제가 찾고 있던 것입니다. 나는 gdb를 조금 더 잘 배우려고 노력할 것이다. – PSkocik

2

디버그 기호 -g으로 컴파일 했습니까? 백 트레이스의 경우 명령은 bt이어야하며 bt full을 전체 백 트레이스로 사용할 수도 있습니다.

더 많은 정보를 정기적으로 : https://sourceware.org/gdb/onlinedocs/gdb/Backtrace.html

+0

고마워요! 'bt full'은 가치를 보여줍니다! 이 문제에 대해보다 세분화 된 방법이 나오면 받아들이 기 전에 조금 기다릴 것입니다. – PSkocik

관련 문제