문제

동료는 손상된 메모리로 인해 예측 가능한 방식으로 실패하는 C 프로그램을 가지고 있습니다. 그는 사용하고 싶다 dbx 메모리 위치를 모니터링하려면 부패를 일으키는 코드를 정확히 찾아 내기 위해 할당되면.

이게 가능해? 그렇다면 부패의 순간에 중단 점을 생성하는 구문은 무엇입니까?

그렇지 않다면, 이런 종류의 문제를 해결하는 데 좋은 접근법은 무엇입니까?

(저의 일반적인 전술은 소스 컨트롤을보고 최근에 변경된 사항을 확인하는 것입니다. 왜냐하면 그것은 일반적으로 원인이기 때문입니다. 그러나 문제의 코드는 마치 운이 좋지 않은 것처럼 들리므로 작동하지 않을 것입니다. 또한 작동하지 않습니다. , 나는 이미 코드와 함께 일한 적이 없어서 범인으로 자신을 제거했습니다. ;-)

도움이 되었습니까?

해결책

더 깊이 살펴보면 최근 버전에서 솔루션이 나타납니다. dbx 다음과 같습니다.

stop access w <address>, <size>

부터 <address> 그리고 <size> 표현식이 될 수 있고 다음과 같은 명령을 쓸 수 있습니다.

stop access w &p, sizeof(int)

이것은 가정합니다 p 포인터이고 우리는 그것이 가리키는 첫 번째 단어를 모니터링하고 싶습니다.

나는 또한 벌금을 가로 질러 달린다 지도 시간 메모리 버그를 추적하고 훔친 경우. 사용합니다 gdb 보다는 dbx, 그러나 원칙은 동일해야합니다.

다른 팁

AIX에서는 stophwp를 사용하고 싶습니다 :

(dbx) help stophwp

stophwp <address> <size>

        Stop execution when the contents of the specified
        memory region change.  This is a accomplished in
        hardware and may not be available on all models.

나는 Solaris Dev가 아니지만 GDB 및 하드웨어 브레이크 포인트 로이 작업을 수행 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top