kernel.core_pattern
프로그램이 코어를 덤프할 때 특정 파일 이름 등을 사용하여 특정 위치에 코어 파일을 배치하도록 설정합니다 .
kernel.core_pattern = | /var/core_file_handler.py %e %s %p %lu %g %t
대상 디렉터리와 샘플 코어 파일은 다음과 같습니다.
$ ls -l /var/cores
drwxr-xr-x 2 root root 4.0K Mar 23 09:42 app
$ ls -l /var/cores/app/
-rw-r--r-- 1 root root 60510208 Mar 23 09:42 2016.03.23_09.42.14.867727_11_SIGSEGV_u
센트OS 6.7
CentOS 6.7에는 bash 4.1.2와 gdb 7.5가 있습니다.
$ bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
$ gdb --version
GNU gdb (GDB) Red Hat Enterprise Linux (7.5.0.20120926-26.el6)
코어 파일을 열고 싶을 때 gdb를 입력한 다음탭 완료경로 및 코어 파일
gdb ./app /var/cores/app/201.... <tab>
그러면 핵심 파일 이름이 성공적으로 완성됩니다.
우분투14.04
Ubuntu 14.04에는 bash 4.3.11과 gdb 7.7.1이 있습니다.
$ bash --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
$ gdb --version
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
코어 파일을 열고 싶을 때 gdb를 입력한 다음탭 완료길이지만,코어 파일이 아님
gdb ./app /var/cores/app/ <tab> <tab> <tab>....
이것은 것이다탭 없이 핵심 파일 이름 완성. 그냥 멈춰서 /var/cores/app/
더 이상 진행되지 않습니다
- 액세스 권한은 두 컴퓨터 모두에서
/var/cores/app
동일합니다 . - 액세스 권한은 두 컴퓨터 모두에서
/var/cores/app/core_file
동일합니다 .
질문:
내가 왜 그럴 수 있지?탭 완료Core-file-name은 CentOS에서는 사용할 수 있지만 Ubuntu에서는 사용할 수 없습니까?
답변1
이는 프로그래밍 가능한 완성과 관련이 있습니다. 프로그램이 처리할 수 없는 일을 제거함으로써 사용자의 삶을 더 쉽게 만들 수 있다는 생각입니다.
그러나 실제로는 완성에서 무언가를 제외함으로써 완성 제외에도 불구하고 필연적으로 사용하고 싶은 무언가로 끝나게 되는 경우가 많습니다. 그 시점에서 프로그래밍 가능한 완성은 도움이 되기보다는 부담이 됩니다.
이 문제는 세 가지 방법으로 해결할 수 있습니다.
- 언로드는 프로그래밍 방식으로 수행할 수 있습니다. 필요하지 않은 선택 기능입니다.가지다당신이 그것을 사용하고 싶지 않다면. 당신은 이것을 할 수 있습니다
apt-get remove bash-completion
- 어떤 이유로 bash 완료를 제거하고 싶지 않거나 제거할 수 없는 경우 를 실행
complete -r
하면 모든 완료 규칙이 다시 제거됩니다. 비슷한 접근 방식으로 이 작업을 수행하면.bashrc
규칙이 처리된 다음 다시 삭제되기 때문에 bash가 시작될 때 약간의 성능 저하가 있다는 점을 제외하면 효과는 첫 번째 옵션과 동일합니다. - bash가 가끔 파일 이름을 완성하도록 강제하려면 대신
alt
+를 사용 하여 bash가 파일 이름 완성을 수행하도록 할 수 있습니다./
tab
답변2
이는 Ubuntu 시스템의 사용자 정의 자동 완성 동작이 gdb
핵심 파일 이름과 일치하지 않기 때문에 발생합니다.
at의 사용자 정의 완성 기능을 조정하여 동작을 수정할 수 있습니다 gdb
.
/usr/share/bash-completion/completions/gdb
예를 들어, 핵심 파일의 이름을 약간 더 고유하게 지정하여( corexyx...
백업을 피할 수 있도록) 마무리를 망쳤습니다. 나는 줄을 바꿨다 :
COMPREPLY+=( $( compgen -f -X '!?(*/)core?(.+([0-9]))' -o plusdirs \
도착하다
COMPREPLY+=( $( compgen -f -X '!?(*/)core?(*)' -o plusdirs \
이는 단순히 코어 파일을 허용하는 패턴을 확장합니다(특히 다음 문자가 core
있는 경우 .
.
GDB의 "스마트" 완성이 일치하는 항목을 생성하지 않을 때 기본 일치 항목을 포함하려면 주석에서 Mark가 제안한 대로 수행하고 마지막 줄을 다음과 같이 변경할 수 있습니다.
complete -F _gdb gdb
도착하다
complete -o default -F _gdb gdb
이 옵션에 대한 문서는 다음과 같습니다 -o default
.
compspec이 정의될 때 -o 기본 완료 옵션이 제공되면, compspec(및 기본 bash 완성)이 일치를 생성하지 않을 때 readline의 기본 완성이 수행됩니다.
마지막으로, complete -F _gdb gdb
줄 전체를 주석 처리하여 GDB의 스마트 완성 기능을 완전히 비활성화할 수 있습니다.