실제로 수행하는 작업은 단일 비트 설정 또는 삭제시 워치 포인트를 설정하려고하는 것입니다. 그 비트를 포함하는 단어에 워치 포인트를 설정 한 다음 * 단어 & 마스크 (설정을 위해, 또는 (~ * word) & 마스크를 지울 때 조건부로 만듭니다)gdb에서 watchpoint의 이전 값과 새로운 값에 대한 프로그래밍 방식의 액세스
문제는 다른 비트 동일한 단어에서 수정 될 수 있으며 조건이 이미 일치 할 수도 있습니다. 이전 값과 새 값을 가지고 있다면 (($ old^$ new) & 마스크 조건)을 설정할 수 있습니다.
python gdb.Breakpoint 클래스를 살펴 보았지만이 정보도 수신되지 않는 것 같습니다.
나는 미친 듯이 갈 수 있고 * word 값이 바뀔 때마다 현재 값을 기록하는 명령 목록을 설정하고이를 $ old로 사용한다고 가정합니다. 그러나 반 시간은 제가 이것을 사용하고 있습니다. 실제로 그것을 rr을 통해 사용하고 있기 때문에 거꾸로 갈 수도 있습니다.
필자는 처음에는'++ depth '를 가지고, 마지막으로'--depth' 함수를 가지고 있습니다 (void 함수, 다른 반환 값 없음). 이 함수의 시작과 끝에서 Python 코드 ('gdb.Breakpoint'의 하위 클래스)를 실행하고 싶습니다. 함수가 반환하는 breakpoint를 설정하는 트릭 (https://stackoverflow.com/questions/3649468/)은 아무 것도 작동하지 않는 것 같았고, 따라서 변수'depth'에 watchpoint를 설정하는 것이 효과가있을 것이라고 생각했습니다. , 그러나 나는 ++ 깊이와 --depth (함수 입력과 종료)를 구별 할 수 없다. 몇 가지 해결 방법이 있습니까? – ShreevatsaR
나는 함수 시작 부분에 breakpoint와 depth 변수에 watchpoint를 설정하고 이들 중 하나가 트리거 된 모든 시간을 추적하는 전역 상태 (기본적으로 스택)를 유지하는 트릭을 찾아 냈다. 함수 중단 점에서'('를 스택에 놓으십시오; watchpoint에서 마지막 트리거가 함수이면 스택에'| '를 넣으십시오. 그러면 함수를 입력한다는 것을 알 수 있습니다. 네가 그걸 끝내고 있다는 것을 알아라.) 등등. 그러나 나는 그다지 이상한 것이 없다고 상상한다. :-) – ShreevatsaR