iOS 에서 CPU 스 레 드 디 버 깅 의 고급 기술 공유
최근 개발 라 이브 방송 에서 CPU 성능 이 꽉 차 서 CPU 주파수 가 떨 어 지고 발열 이 심 한 것 을 발견 하고 렉 이...
이 문 제 를 파악 하기 위해 우 리 는 적어도 3 일 동안 CPU 의 스 레 드 코드 를 조금씩 추적 했다.C+의 thread 를 만 났 을 때 기호 표 가 없고 대상 주소 만 볼 수 있 었 다.그 밖 에 방법 이름 도 없 을 때 정말 어 쩔 줄 몰 랐 다.이 편 은 고급 디 버 깅 방법 을 소개 했다.기호 표 와 관련 명령 을 사용 하여 관련 코드 를 찾 아 호출 했다.잘 못 썼 습 니 다.여러분,가볍게 뿌 려 주세요.코드 관련 과정 은 동료 진호 의 전폭 적 인 지지 에 감 사 드 립 니 다.
Talk is cheap show me the code
우리 의 실현 방향 은 동적 라 이브 러 리 의 첫 주 소 를 찾 아 호출 하 는 것 이다.이로부터 관련 명령 으로 회복 하 는 것 이다.
전기 준비
build setting 에서 기호 표 열기
1.헤더 파일 가 져 오기
#import <mach-o/dyld.h>
이것 은 mac os 의 실행 가능 한 파일 의 동적 링크 라 이브 러 리 파일 내부 에 함수 가 몇 개 있 습 니 다.2.다음 코드 를 호출 된 곳 으로 복사 합 니 다.
//1
uint32_t count = _dyld_image_count();
DDLogInfo(@"Dyld image count %d", count);
//2
for (int i = 0; i < count; i++) {
char *image_name = (char *)_dyld_get_image_name(i);
//3
const struct mach_header *mh = _dyld_get_image_header(i);
intptr_t vmaddr_slide = _dyld_get_image_vmaddr_slide(i);
//4
NSLog(@"Image name %s at address 0x%llx and ASLR slide 0x%lx.
",
image_name, (mach_vm_address_t)mh, vmaddr_slide);
}
제 가 위 코드 를 설명해 드릴 게 요.1.현재 미 러 수량 꺼 내기
2.미 러 를 옮 겨 다 니 기
3.미 러 주소 가 져 오기
4.인쇄
그리고 프로그램 을 실행 하 세 요.
그리고 콘 솔 을 보고 ASLR 우리 log 의 입력 내용 을 걸 러 냅 니 다.
그리고 프로젝트 의 제품 을 클릭 하 세 요.
오른쪽 단추 show in finder
다음 단계 에서 터미널 cd 를 이 디 렉 터 리 로 엽 니 다.
그리고 pwd 한번 보 여 주세요.
3.콘 솔 에서 로그 인쇄 코드 검색
저희 첫 번 째 주 소 를 찾 았 습 니 다.
주의:이 단 계 는 매우 중요 합 니 다.만약 사용 하기 어렵다 면 몇 번 다시 시도 해 보 세 요.
main 함수 의 첫 번 째 주소 ASLR 에서 검색 한 첫 번 째 주 소 를 꺼 내 서 터미널 로 복사 해서 입력 하 십시오.
atos -arch arm64 -o com_kwai_gif.app.dSYM/Contents/Resources/DWARF/com_kwai_gif -l 0x1006b8000
메모:여 기 는 기호 표 경로 입 니 다.어디서 찾 을 지 모 르 면 구 글 을 찾 아 보 세 요.저희 가 한번 테스트 를 해 보도 록 하 겠 습 니 다.
우선 콘 솔 상단 패 널 에서 클릭 하 세 요.
그리고 consolo 에 bt 를 입력 하 세 요.
다음 내용 을 보면 성공 했다 는 뜻 입 니 다.
4.실제 컴퓨터 가 작 동 하여 알 수 없 는 스 레 드 를 찾 습 니 다.
먼저 Xcode 프로젝트 의 Profile 을 누 르 면 instruments 를 실행 합 니 다.저 는 프로젝트 를 실행 한 후에 Xcode 9.4 는 instruments 로 빈 틈 없 이 전환 할 수 있 습 니 다.
우 리 는 관련 스 레 드 를 찾 았 습 니 다.이름 도 없고 대상 의 이름 도 모 르 고 16 진수 주소 만 있 습 니 다.
우 리 는 마음대로 주 소 를 찾 아 터미널 에 입력 했다.
자,문제 가 있 으 면 produt 과 기호 표를 삭제 하고 다시 컴 파일 하 십시오.
총결산
CPU 디 버 깅 과정 이 매우 번 거 롭 고 중간 과정의 코드 는 대부분이 C++의 호출 입 니 다.주로 스 레 드 가 소모 하 는 비용 입 니 다.그 중에서 많은 수확 이 있 습 니 다.많은 가르침 을 바 랍 니 다.
자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
CPU와 GPU의 차이 및 장치 확인(Ubuntu 기준)CPU는 컴퓨터의 두뇌를 담당한다. 다양한 환경에서의 작업을 빠르게 수행하기 위해 ALU()의 구조가 복잡하고 명령어 하나로 처리할 수 없는 기능도 많으며 각종 제어 처리를 위한 부분이 많다. 반면, GPU는 특화된...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.