2012-05-31 3 views
4

이 같은 구조를 가지고있다. 이 구조체에 대한 포인터는 다른 함수로 전달되므로이 구조체의 변수가 업데이트됩니다. 나는 그것이 많은 기능을 통해 여행 으로이 구조체에서 변수에 대한 워치 포인트를 설정하고 싶습니다. 어떻게 변화하는지 확인하십시오. 이 감시 지점을 어떻게 설정합니까?gdb를 감시 점은

답변

6

먼저

watch myStructInstance.a 

처럼 중단 점은 휴식를 사용하여 구조체의 인스턴스를 생성,

처럼
break myfile.c:9 

그럼 그냥 감시 점을 설정 시계를 사용하여 설정 변수 의 경우 또는

watch *0x7ffff75177f0 

메모리 주소. 메모리 주소는 이제 때마다 변수 a 또는 지정된 메모리 주소가 변경됩니다 GDB가 중단됩니다

print &myStructInstance.a 

처럼 인쇄를 사용하여 쉽게 구할 수있다.

2

내 가상 메모리 시뮬레이터를 디버깅 할 때 같은 문제가 발생합니다. 문제는 구조체 내부의 데이터를 자세히 살펴 보는 것입니다.

인쇄를 사용하여 확인했지만 너무 시끄 럽습니다. 15 개 이상의 변수를 출력해야하기 때문입니다.

또한 워치 포인트를 사용해 보았지만 내 컴퓨터에서는 하드웨어 워치 포인트를 4 개까지만 설정할 수 있습니다. 그건 내 목표에 가깝지 않다.

마지막으로 .gdbinit 파일에서 사용자 정의 함수를 사용하여 해결책을 찾았습니다. 예 : 나는 좀 더 편리하게 사용할 수 있도록

define lookintoStructs 
    if mystruct != 0x0 
     print mystruct[0] 
     print mystruct[1] 
     print mystruct[2] 
     print mystruct[3] 
     print mystruct[4] 
     print mystruct[5] 
    end 
end 

를 사용하여 내 구조의 배열을보고 싶은 경우에, 나는 그것이 GDB 내 다음 명령을 훅하고 싶습니다.

define hook-next 
    lookintoStructs 
end 

그래서 gdb에서 next 또는 n을 호출하면 lookintoStructs가 자동으로 호출 될 수 있습니다. 나를 위해 잘 작동합니다.