단일 단계 진입, 단일 단계 스텝 오버 및 단일 단계 종료를 수행하기 위해 GDB를 사용하는 방법은 무엇입니까?

단일 단계 진입, 단일 단계 스텝 오버 및 단일 단계 종료를 수행하기 위해 GDB를 사용하는 방법은 무엇입니까?

GDB를 입력했는데 help들어오기, 나가기, 나가기 등에 대한 정보를 찾을 수 없었습니다. _start어셈블러의 ()에 중단점을 설정 했습니다 break _start. 그런 다음 입력 next하고 디버깅이 완료되었습니다. 끝났기 때문에 그런 것 같지만 _start그렇지 않습니다.안으로 들어가다내가 원하는대로.

답변1

help running몇 가지 팁이 제공됩니다:

step및 지시문이 있습니다 next(그리고 또한 있습니다 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단일 단계로 실행됩니다.초과하다서브루틴.

step( stepinext) nexti는 "라인" 또는 "명령어" 증분으로 구분됩니다.

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

답변2

"Finish" 명령을 사용하십시오. 이는 때때로 "Step Out"과 동일한 작업을 수행합니다. 스택이 수행하는 작업(일반적으로 함수)을 완료한 후 다음 줄로 이동합니다. 자세한 내용은 명령을 참조하세요.

답변3

저도 같은 문제가 있어서 여기에 왔습니다. 결국 나는 내 목적을 위해 루프의 "step out"과 같은 것을 사용할 수 있을 때마다 루프 뒤에 또 다른 중단점을 설정한 다음 프로그램이 continue루프를 완료하고 이어서 중단점까지 실행되도록 할 수 있다는 것을 발견했습니다. 이것이 대부분의 사람들에게 당연하다면 죄송합니다. 하지만 이 질문에 대한 답을 찾는 누군가에게는 도움이 될 수 있습니다.

관련 정보