2011-10-15 2 views
3

좋아, 난 단지 방법이 (또는하지 않음) 특정 개체 및/또는 선택엑스 코드/목표 C 조건부 중단 점 발신자를 기반으로

에 의해 호출 할 때 "히트"얻는다 중단 점을 설정하는 요구 사항이 내가 생각할 수있는 가장 쉬운 방법은 스택을 풀고 현재 메서드의 직접 호출자의 ID 및 선택기를 반환하는 일부 컴파일러 매크로 (예 : _cmd)가있는 경우입니다. majical 매크로를 가정

는 예를 들어) & _cmd_caller_sel을 _cmd_caller_id했다 -

if ((_cmd_caller_id == self) && (_cmd_caller_sel != @selector(some_method:signature:)) { 
    NSLog(@"called by %@ - hitting breakpoint",NSStringFromSelector(_cmd_caller_sel)); 
} 

을 (그리고 당신이 NSLog를 (포함하는 행에 브레이크 포인트를 둘 것입니다 ...));

이유는 여러 번 호출되는 메서드가 있는데, 어떤 메서드가 문제의 메서드를 호출하는지 결정하기 위해 위에서 설명한 트랩을 설정하는 것보다 복잡한 조건 집합을 설정할 수 있어야합니다. 그리고 언제.

답변

3

는 중단 점에 조건, 호출 사이트에서 중단 점을 설정합니다 (예를 들어, 자기 == 무엇이든)

+0

그래, 내가 그 문제를 (이전 버전과 작업) 다른 방법으로 해결했다. 그러나 어떤 경우에는 호출 사이트에 대한 소스가 없습니다. - 나는 가짜 보존이 어디서 왔는지 추적하려고했습니다. 스택을 푸는 것이 좋을 것입니다. 그러나 그것은 다른 날을위한 것 같습니다. – unsynchronized

+0

여분의 저장 위치를 ​​파악하려면 GDB가 아닌 Instruments를 사용하십시오. – NSResponder

+0

정상적으로 나는 당신과 동의 하겠지만, 나는 실시간 분석이 필요한 무언가를 연구 중이다. 즉 인스트루먼트의 성능 저하는 허용되지 않습니다. (즉, 재생에 앞서 실시간 오디오 샘플의 많은 수를 처리하고 있음) – unsynchronized