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 및 지침 (및 nextistepi)

(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 서브 루틴

stepstepi (및 nextnexti)는 “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 또는 finIDEA 또는 iv id의 step-out입니다. = “28c904db61″>
  • .

    답변

    같은 질문이있어서 여기에 왔습니다. . 결국 내 목적을 위해 루프의 “스텝 아웃”과 같은 것을 사용할 수있을 때 루프 다음에 또 다른 중단 점을 설정 한 다음 continue 프로그램이 완료되도록 할 수 있다고 생각했습니다. 루프를 실행하고 나중에 중단 점에 도달합니다. 이것이 대부분의 사람들에게 명백하지만이 질문에 대한 답을 찾는 사람에게 도움이 될 것입니다.

    답변

    “마침”명령을 사용하십시오. 이것은 때때로 “스텝 아웃”과 같은 일을합니다. 스택이 수행하는 작업 (일반적으로 함수)을 완료하고 그 다음 줄로 이동합니다. 자세한 내용은 명령을 찾아보십시오.

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다