사용하면 당신은 step over
F10 and step into
F11.
사이의 차이를 발견했습니다
문제는 (기본값) step over
는 call
는 무시 나타납니다.
step into
코드가 필요하고 디버거가 예상대로 동작합니다. 이 step over
작동
단계
이상의 방법은 디버거가 정지 해, 다음 명령에 중단 점을 설정하고 다시 다음 명령에 중단 점을 이동한다는 것입니다.
Step over
은 약 (조건부) 점프 및 계정을 알고 있지만 호출 문을 무시 (단계별)합니다. call
을 다른 서브 루틴으로 점프하는 것으로 해석하고 현재 컨텍스트 내에서 머물고 싶다고 가정합니다.
이러한 자동 중단 점은 취소 할 때까지 유지되는 수동 중단 점과 달리 일시적입니다.
단계에
Step into
동일한 않고 또한 모든 착신에 중단 점을 설정한다; 실제로 모든 서브 루틴을 가로 지르는 숲 속으로 당신을 안내합니다.
밖으로 단계
당신이 Shift 키를 사용하여 서브 루틴 Visual Studio allows you to step out '에'너무 깊이 밟아야 경우F11; 발신 통화 후 다음 명령으로 다시 돌아갑니다.
일부 다른 디버거는이 기능의 이름을 "return until return"으로 지정합니다.
디버거는 소스 코드 라인마다 목표 어드레스의리스트를 유지한다 (예를 들어 C) 높은 언어의 소스 코드를 처리하는 경우에는 높은 수준의 코드를 디버깅
. 그것은 소스 코드의 라인 당 중단 점을 계획 할 것입니다.
하이 레벨 코드의 모든 라인이 0 개 이상의 라인으로 변환된다는 것 외에도, 원시 어셈블리 코드를 단계별로 실행하는 것과 동일하게 작동합니다.
디버거는 종종 인라인 어셈블리를 완전히 이해하지 못합니다. 코드가 제대로 실행되고 있지만 디버거가 올바르게 추적하지 못하고 있습니까? 'jmp L1 '이전에 EAX를 8 이외의 값으로 설정 한 다음'L2 호출 다음에 값을 검사하면 알 수 있습니다. 디버거가 아닌 코드에서이 작업을 수행하십시오. – zwol
또한 이와 같은 코드를 작성하려면 C 함수에 삽입 된 "인라인 어셈블리"가 아닌 독립형 .asm 파일을 사용하는 것이 좋습니다. 컴파일러가 파울 가능성이 훨씬 적습니다. (특히 컴파일러는 'call'을 사용하거나 어셈블리 포인터 내에서 스택 포인터를 이동하는 경우 매우 혼란스러워합니다.) – zwol
또한 컴파일러에서 생성 된 최종 바이너리의 디스 어셈블리를 살펴보십시오. 분기가 기대 한 곳으로 가거나 컴파일러가 잘못 컴파일 했습니까? –