>

때로는 다음과 같은 함수를 디버깅하고 싶습니다 :

my_func1(my_func2(my_func3(val)));

GDB에서이 중첩 호출을 단계별로 실행할 수있는 방법이 있습니까?

my_func3, my_func2, my_func1 등을 단계별로 실행하고 싶습니다

  • 답변 # 1

    무엇을 밟고 계십니까? 와이즈 비즈   next 를 디버깅 할 때 다음 줄로 갈 것입니다. 그러나 my_func1(my_func2(my_func3(val)));  my_func3을 입력해야합니다. 예 :

    step
    
    

    디버깅 :

    int my_func1(int i)
    {
      return i;
    }
    int my_func2(int i)
    {
      return i;
    }
    int my_func3(int i)
    {
      return i;
    }
    int main(void)
    {
      return my_func1(my_func2(my_func3(1)));
    }
    
    

  • 답변 # 2

    함수 정의가 소스 코드의 위치를 ​​알고 있다면 그 해결책 안에 중단 점을 두는 것이 해결책입니다.

  • 답변 # 3

    그렇습니다. 분해로 더러워집니다. 먼저 (gdb) b main Breakpoint 1 at 0x4004a4: file c.c, line 19. (gdb) run Starting program: test Breakpoint 1, main () at c.c:19 19 return my_func1(my_func2(my_func3(1))); (gdb) step my_func3 (i=1) at c.c:14 14 return i; (gdb) step 15 } (gdb) step my_func2 (i=1) at c.c:9 9 return i; (gdb) step 10 } (gdb) step my_func1 (i=1) at c.c:4 4 return i; (gdb) step 5 } (gdb) step main () at c.c:20 20 } (gdb) cont Continuing. Program exited with code 01. (gdb) 를보십시오  명령 (약어 step ). 그것이 당신을 s 에 넣지 않으면 대신 my_func3() 를 사용해보십시오.  명령 (약어 stepi )를 사용하여 한 번에 하나의 명령을 수행합니다. 함수 호출 인수를 설정하고 나중에 정리하는 많은 지시 사항이있을 수 있기 때문에 여러 번 호출해야 할 수도 있습니다.

    si

관련 자료

  • 이전 gradle - 반응 기본 - 구성 ': app : debugcompileclasspath'에 대한 모든 종속성을 해결할 수 없습니다
  • 다음 c++ - qglwidget - qpainter로 오버 페인팅