c(gcc)언어 공부를 시작하면서 gdb를 함께 시작했습니다. gdb에서 s,n명령은 현재행을 수행하고, 함수호출시에 함수 내부로 들어가고, 들어가지 않는 차이가 있는걸로 압니다. si,ni는 인스트럭션을 수행하고, 함수 내부로 들어가고, 안들어가고의 차이라는데... i(instruction)가 하나 붙었을 뿐인데... 차이점이 명확하게 와닿지 않네요.
step와 next는 소스 줄 단위로 실행하고, stepi와 nexti는 기계어 instruction 단위로 실행합니다.
다른 UI 도움없이, gdb를 바로 실행했을 경우, 따로 instruction을 보여주지 않기 때문에, stepi/nexti를 쓰기 전에 "disp/i $pc" 명령을 써서 다음 instruction을 출력하게 해 주는 것이 좋습니다:
$ gdb -q a.out (gdb) br main # breakpoint at main() Breakpoint 1 at 0x80483c5: file tmp.c, line 11. (gdb) disp/i $pc # display program counter value as instruction. (gdb) r # run Starting program: /home/cinsk/src/a.out Breakpoint 1, main () at tmp.c:11 11 int i = 0; 1: x/i $pc 0x80483c5 <main+17>: movl $0x0,-0x8(%ebp) (gdb) ni 12 i = 3 + i; 1: x/i $pc 0x80483cc <main+24>: addl $0x3,-0x8(%ebp) (gdb) 13 printf("hello\n"); 1: x/i $pc 0x80483d0 <main+28>: movl $0x80484d8,(%esp) (gdb) <RET> # repeat previous command 0x080483d7 13 printf("hello\n"); 1: x/i $pc 0x80483d7 <main+35>: call 0x80482fc <puts@plt> (gdb) _
-- C FAQ: http://www.eskimo.com/~scs/C-faq/top.html Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html Korean Ver: http://cinsk.github.io/cfaqs/
상세한 사용예까지 들어주셔서 이해하는데 많은 도움 되었습니다. ^^ 답변 감사드립니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
step와 next는 소스 줄
step와 next는 소스 줄 단위로 실행하고,
stepi와 nexti는 기계어 instruction 단위로 실행합니다.
다른 UI 도움없이, gdb를 바로 실행했을 경우, 따로 instruction을 보여주지 않기 때문에, stepi/nexti를 쓰기 전에 "disp/i $pc" 명령을 써서 다음 instruction을 출력하게 해 주는 것이 좋습니다:
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
상세한 사용예까지
상세한 사용예까지 들어주셔서 이해하는데 많은 도움 되었습니다. ^^
답변 감사드립니다.
댓글 달기