GDB에있는 동안 help
를 입력했지만 step-into, step에 대해 아무것도 찾지 못했습니다. -over 및 step-out. _start
(break _start
)의 어셈블리 프로그램에 중단 점을 넣었습니다. 그 후 next
디버깅을 마쳤습니다. _start
를 완료하고 <를 수행하지 않았기 때문인 것 같습니다. 내가 원했던대로 em> 단계로 들어 가세요 .
도움이 될 수있는 사람이 있나요?
댓글
- 전체 GDB 문서를 읽어보세요. 제가 회상했듯이, 제가 처음 배울 때 그들은 이것에 대해 상당히 도움이되었습니다. 안타깝게도 ' 몇십 년 동안 해당 수준에서 어떤 프로그램도 디버깅 할 필요가 없었기 때문에 실제 명령이 제 두뇌에서 교체 된 것 같습니다. 그래서 저는 ' 정답을 작성할 수 없습니다. 그러나 매뉴얼에서 알아 내면 자신의 질문에 보너스를받을 수 있습니다.
- @MAP I ' 다시 시도합니다. 더 나은 디버거 (KDbg)를 사용하려고했지만 ' 우분투에서 사용하는 데 성공하지 못했습니다 .
- gdb는 좋은 디버거입니다. Emacs를 프론트 엔드로 사용할 수 있습니다.
- gdb는 끔찍한 디버거입니다. 얼마나 짜증나는지를 다루는 무수히 많은 확장이 있습니다. 끔찍한 구문, 동의하지 않는 명령, 투박한 끔찍한 페이징, 구식 형식화, ' 16 진수 덤프가 없습니다. 아니요. ' 좋은 디버거가 아닙니다. 그렇다면 ' 좋은 디버거를 사용하지 않은 것입니다.
Answer
help running
는 몇 가지 힌트를 제공합니다.
step
및 지침 (및 nexti
및 stepi
)
(gdb) help next Step program, proceeding through subroutine calls. Usage: next [N] Unlike "step", if the current source line calls a subroutine, this command does not enter the subroutine, but instead steps over the call, in effect treating it as a single source line.
step
서브 루틴으로 들어가는 단계를 볼 수 있지만 next
는 over 서브 루틴
step
및 stepi
(및 next
및 nexti
)는 “line”또는 “instruction”증분으로 구분됩니다.
step -- Step program until it reaches a different source line stepi -- Step one instruction exactly
관련 항목 : finish
:
(gdb) help finish Execute until selected stack frame returns. Usage: finish Upon return, the value returned is printed and put in the value history.
더 많은 유용한 정보는 https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html
댓글
- 기능 다른 소스 행에 도달 할 때까지 ?
-
for(i=0;i<10;i++) { printf("%d\n",i); }
는 하나의 소스 행이지만 여러 명령입니다. - 탈출 할 수있는 방법이 있습니까? 실행중인 도움말에서 ' 찾을 수 없습니다.
- " 스텝 아웃
?
finish
명령은 현재 스택 프레임을 완료하며 일반적으로 현재 서브 루틴을 완료하고 호출자에게 반환됩니다. -
finish
또는fin
는IDEA
또는 iv id의step-out
입니다. = “28c904db61″>
.
답변
같은 질문이있어서 여기에 왔습니다. . 결국 내 목적을 위해 루프의 “스텝 아웃”과 같은 것을 사용할 수있을 때 루프 다음에 또 다른 중단 점을 설정 한 다음 continue
프로그램이 완료되도록 할 수 있다고 생각했습니다. 루프를 실행하고 나중에 중단 점에 도달합니다. 이것이 대부분의 사람들에게 명백하지만이 질문에 대한 답을 찾는 사람에게 도움이 될 것입니다.
답변
“마침”명령을 사용하십시오. 이것은 때때로 “스텝 아웃”과 같은 일을합니다. 스택이 수행하는 작업 (일반적으로 함수)을 완료하고 그 다음 줄로 이동합니다. 자세한 내용은 명령을 찾아보십시오.