>운영 및 유지보수 >리눅스 운영 및 유지 관리 >리눅스에서 코어란 무엇인가

리눅스에서 코어란 무엇인가

藏色散人
藏色散人원래의
2023-03-23 10:00:502778검색

리눅스에서 코어는 디버깅 정보가 추가된 메모리 이미지입니다. 리눅스에서 프로그램이 종료되거나 비정상적으로 종료되는 경우 프로그램이 실행될 때 메모리, 레지스터, 스택 포인터 등이 포함된 코어 파일을 분석에 사용합니다. 실행 중입니다. ELF 형식의 정보는 프로그램의 현재 상태를 파일에 덤프하는 것으로 이해될 수 있습니다.

리눅스에서 코어란 무엇인가

이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.

리눅스에서 코어란 무엇인가요?

Linux에서 코어 파일을 사용하는 방법에 대한 자세한 설명

가끔 로그 없이 프로그램이 비정상적으로 종료될 수 있습니다. 이때 코드 파일을 사용하여 메모리, 레지스터, 스택 포인터 등을 기록할 수 있습니다. 실행 중인 프로그램 정보

코어 파일:

보통 Linux에서 프로그램이 종료되거나 비정상적으로 종료될 때 프로그램 실행 시 메모리, 레지스터, 스택 포인터 및 기타 정보가 포함된 코어 파일을 분석에 사용합니다. 형식은 ELF로 프로그램으로 이해하면 작업의 현재 상태를 파일로 덤프합니다. 이 파일을 도구로 분석하면 프로그램이 비정상적으로 종료되거나 종료될 때 해당 스택 호출 및 기타 정보를 찾을 수 있습니다. 문제 해결을 돕기 위해.

코어 파일 디버깅 사용

생성 방법

현재 코어 파일 상태 보기

$ ulimit -a
...
-c: core file size (blocks)   0 # 关闭状态
...

생성 스위치 켜기

ulimit -c unlimited
ulimit -a
...
-c: core file size (blocks)   unlimited
...

코어 파일 크기를 블록 단위로 제한합니다. 일반적으로 1블록=512입니다. bytes, 설정이 너무 작으면 파일이 생성되지 않을 수 있습니다

$ ulimit -c 1024
$ ulimit -a
...
-c: core file size (blocks)   1024
...

생성 스위치를 끄세요

ulimit -c 0
ulimit -a
...
-c: core file size (blocks)   0
...

코어 파일에 대한 위 작업은 영구적으로 적용되어야 하는 경우에만 적용됩니다. 해당 작업은 /etc/profile

Generation Path

core 파일이 기본적으로 프로그램의 작업 디렉터리에 생성되므로 충분한 공간이 있는지 확인해야 합니다. 및 해당 디렉터리에 대한 쓰기 권한

echo /MyCoreDumpDir/core.%e.%p > /proc/sys/kernel/core_pattern

naming에 사용된 매개변수 목록

%p - insert pid into filename # 添加 pid 
%u - insert current uid into filename # 添加当前 uid 
%g - insert current gid into filename # 添加当前 gid 
%s - insert signal that caused the coredump into the filename # 添加导致产生 core 的信号 
%t - insert UNIX time that the coredump occurred into filename # 添加 core 文件生成时的 unix 时间 
%h - insert hostname where the coredump happened into filename # 添加主机名 
%e - insert coredumping executable name into filename # 添加命令名

/proc/ sys/kernel/core_uses_pid 파일의 값이 1이면 %p를 언제 구성하든 최종 생성된 코어 파일은 pid 추가

디버깅 방법

gdb를 사용하여 코어 파일을 디버깅할 수 있으며 -g 옵션을 컴파일할 때 가져와야 합니다

$ gdb a.out
...
(gdb) core-file core
...
(gdb) bt 
...

PC에서 임베디드 장치에서 생성된 코어 파일을 디버깅해야 하는 경우 , 해당 플랫폼의 gdb 도구를 선택하고 gdb

$ xxx-xxx-gdb a.out
...
(gdb) solib-search-path xxx.so:xxx.so
...
(gdb) core-file core
...
(gdb) bt
...

를 입력한 후 기호 파일의 위치를 ​​설정해야 합니다. 관련 권장 사항: "Linux Video Tutorial

위 내용은 리눅스에서 코어란 무엇인가의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.