addr2line 명령 사용
4494 단어 링크 ux 학습
Addr2line 도구 (표준 GNU Binutils 의 일부분) 는 명령 의 주소 와 실행 가능 한 이미 지 를 파일 이름, 함수 이름, 소스 코드 줄 수로 변환 할 수 있 는 도구 입 니 다.이런 기능 은 추적 주 소 를 더 의미 있 는 내용 으로 바 꾸 는 데 정말 좋다.
이 과정 이 어떻게 일 하 는 지 알 고 싶다 면 우 리 는 간단 한 상호작용 의 예 를 시험 해 볼 수 있다.(목록 4 와 같이 이 과정 을 가장 간단하게 보 여 주 는 방법 이기 때문에 셸 에서 직접 조작 합 니 다.) 이 예제 C 파일 (test. c) 은 통과 합 니 다.
cat
간단 한 프로그램 이 실 현 된 것 (즉, 표준 출력 텍스트 를 파일 로 재 설정 하 는 것).그리고 gcc 를 사용 하여 이 파일 을 컴 파일 하면 특별한 옵션 을 전달 합 니 다.먼저 -Wl
옵션) 알림 링크 가 이미지 파일 을 만 들 고 (사용) -g
옵션) 컴 파일 러 에 디 버 깅 기 호 를 생 성 하 라 고 알 립 니 다.최종 실행 가능 한 파일 생 성 test.새로운 실행 가능 한 프로그램 을 가 져 오 면 사용 할 수 있 습 니 다 grep
이미지 파일 에서 도구 찾기 main
주 소 를 찾 으 러 왔 습 니 다.이 주소 와 Addr2line 도 구 를 사용 하면 함수 명 main
, 원본 파일 (/home/mtj/test/test. c) 과 원본 파일 에 있 는 줄 번호 (4) 를 판단 할 수 있 습 니 다.Addr2line 도 구 를 호출 할 때 사용 합 니 다.
-e
실행 가능 한 이미 지 를 설정 합 니 다. test
.사용 -f
옵션, 도구 출력 함수 이름 을 알려 줄 수 있 습 니 다.다음은 전지 A20 플랫폼 에서 addr2line 명령 사용 방법 을 소개 합 니 다.
1. 디버그 매크로 열기
아래 빨간색 부분 return NULL 차단
#define TOMBSTONE_DIR "/mnt/extsd/tombstones"
char* engrave_tombstone(pid_t pid, pid_t tid, int signal, bool dump_sibling_threads, bool quiet, bool* detach_failed, int* total_sleep_time_usec) {//return NULL;//ignore request tombstone. by yangy. mkdir(TOMBSTONE_DIR, 0755); chown(TOMBSTONE_DIR, AID_SYSTEM, AID_SYSTEM);
2. 이후 에 발생 하 는 세그먼트 오 류 는 TF 카드 의 tombstones 폴 더 에 저 장 됩 니 다.
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***Build fingerprint: 'unknown'Revision: '0'pid: 907, tid: 966, name: InitStage2 >>>/system/bin/newcdr <<
addr2line 사용 - C - f - e newcdr 00026 cb 3 명령 오류 위치 보기
liubin@tf-srv01:~/allwinner/a20_liubin/a20_cdr_stable/camdroid/out/target/product/pluto-tf118kd-t1b/symbols/system/bin$ addr2line -C -f -e newcdr 00026cb3EventManager::init(bool)/home/liubin/allwinner/a20_liubin/a20_cdr_stable/camdroid/device/softwinner/pluto-tf118kd-t1b/newcdr/src/event/EventManager.cpp:338
물론 저희 가 c/c++ 세그먼트 오 류 를 직접 써 도 이 도구 로 디 버 깅 할 수 있 습 니 다.