종종 동일한 메소드 X가 다른 다른 메소드 A, B, C에서 호출됩니다. 메소드 X 내부에서 호출자 메소드 (A, B, C)의 이름을 가져올 수 있습니까? 가장 바람직하게는 GDB 콘솔 명령 (디버그 중)이지만 NSLog를 사용하면 충분합니다.발신자 메소드 이름을 가져 오는 방법은 무엇입니까?
1
A
답변
5
bt
을 입력하면 호출 된 함수가 도움이됩니다. 이렇게하면 호출 된 함수의 백 트레이스가 인쇄됩니다. 호출 계층 구조에서 호출 된 함수 바로 아래에있는 함수가 호출 계층 구조입니다. main
이 factorial
라는 것을
(gdb) bt
#0 factorial (n=10) at recursive.c:13
#1 0x0040135e in main() at recursive.c:9
, 여기, 관찰한다.
1
gdb에서 backtrace
명령을 사용하여 호출 스택을 볼 수 있습니다.
1
X
의 중단 점에있는 경우 where
을 사용하여 스택을 인쇄하면 X
에 대한 호출이 발생한 곳을 확인할 수 있습니다.
0
으로 typedef NSLog 함수 이름을 인쇄 방법의 시작과 끝 부분에 추가합니다 :
#define CustomLogEnter(fmt, ...) NSLog((@"Function entered %s " fmt), __PRETTY_FUNCTION__, ##__VA_ARGS__);
또한, 위의 대안은 gdb를하고 중단 점을 사용하지 않고, 당신이 시도 할 수 원하기 때문에 당신이 할 수있는 __LINE__
을 사용하여 회선 번호를 기록하십시오.