ZZ Binutil 바 이 너 리 도구 모음 (addr2line)
Addr2line 도구 (표준 GNU Binutils 의 일부분) 는 명령 의 주소 와 실행 가능 한 이미 지 를 파일 이름, 함수 이름, 소스 코드 줄 수로 변환 할 수 있 는 도구 입 니 다.이런 기능 은 추적 주 소 를 더 의미 있 는 내용 으로 바 꾸 는 데 정말 좋다.
이 과정 이 어떻게 일 하 는 지 알 고 싶다 면 우 리 는 간단 한 상호작용 의 예 를 시험 해 볼 수 있다.(저 는 셸 에서 직접 작업 을 합 니 다. 목록 4 와 같이 이 과정 을 가장 간단하게 보 여 주 는 방법 이기 때 문 입 니 다.) 이 예제 C 파일 (test. c) 은
cat
간단 한 응용 프로그램 을 통 해 이 루어 집 니 다. (즉, 표준 출력 텍스트 를 파일 로 재 설정 하 는 것 입 니 다)그리고 gcc 를 사용 하여 이 파일 을 컴 파일 하면 특별한 옵션 을 전달 합 니 다.우선 -Wl
옵션 을 사용 하여 링크 기 에 이미지 파일 을 만 들 고 -g
옵션 을 사용 하여) 컴 파일 러 에 디 버 깅 기 호 를 생 성 하 라 고 알려 야 합 니 다.최종 실행 가능 한 파일 test 생 성.새로운 실행 가능 한 프로그램 을 가 져 오 면 이미지 파일 에서 주 소 를 찾 을 수 있 는 grep
도 구 를 사용 할 수 있 습 니 다.이 주소 와 Addr2line 도 구 를 사용 하면 함수 명 main
, 원본 파일 (/home/mtj/test/test. c) 과 원본 파일 에 있 는 줄 번호 (4) 를 판단 할 수 있 습 니 다.Addr2line 도 구 를 호출 할 때 실행 가능 한 이미 지 를 지정 하려 면
main
옵션 을 사용 하 십시오.-e
옵션 을 사용 하면 도구 출력 함수 이름 을 알려 줍 니 다.목록 4. addr2line 의 대화 형 예
$ cat >> test.c
#include <stdio.h>
int main()
{
printf("Hello World
");
return 0;
}
$ gcc -Wl,-Map=test.map -g -o test test.c
$ grep main test.map
0x08048258 __libc_start_main@@GLIBC_2.0
0x08048258 main
$ addr2line 0x08048258 -e test -f
main
/home/mtj/test/test.c:4
$
查看U-BOOT的信息:
U-BOOT本身在编译以后会有一个System.map文件,这里我们就不用再次生成。就直接:
yoyoili@yoyoili-laptop:~/source/system_study/u-boot-1.3.4$ grep board_init System.map
33f92e8c T board_init
yoyoili@yoyoili-laptop:~/source/system_study/u-boot-1.3.4$ arm-softfloat-linux-gnu-addr2line 33f92e8c -e u-boot -f
board_init
/home/yoyoili/source/system_study/u-boot-1.3.4/board/fs2410/fs2410.c:69
就可以看到我们的board_init函数的地址和所在的文件。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.