Linux 커널은 링 버퍼에 세그폴트를 계속 기록합니다.
a.out[25415]: segfault at 8049604 ip 08049604 sp bf88e3fc error 15 in a.out[8049000+1000]
일시적으로 비활성화할 수 있는 방법이 있나요? 내 사용 사례는 모든 종류의 미친 작업을 수행하는 테스트 스위트를 실행하고 있으며 dmesg
해당 기간 동안 세그폴트를 보고 싶지 않다는 것입니다 . dmesg -c
내가 사용해야 하는 테스트 프레임워크는 dmesg 출력을 구문 분석하고 중간에 지울 수 없기 때문에 옵션이 아닙니다.
커널 매개변수가 있는 경우 출력을 살펴보고 있지만 sysctl -a
유용한 내용은 없습니다. kernel.print-fatal-signals
유망해 보이지만 더 자세한 정보를 표시하기 위한 것입니다.
답변1
자, 드디어 찾았습니다. 그것은 알려져 있습니다 debug.exception-trace
.
sysctl -w debug.exception-trace=0
아니면 echo 0 > /proc/sys/debug/exception-trace
끄세요.
# dmesg -c
# dmesg
# echo 'main;' | gcc -xc - && ./a.out
<stdin>:1:1: warning: data definition has no type or storage class
Segmentation fault
# dmesg
[ 539.421736] a.out[1875]: segfault at 600874 ip 0000000000600874 sp 00007ffed85e7018 error 15 in a.out[600000+1000]
# sysctl debug.exception-trace
debug.exception-trace = 1
# ./a.out
Segmentation fault
# dmesg
[ 539.421736] a.out[1875]: segfault at 600874 ip 0000000000600874 sp 00007ffed85e7018 error 15 in a.out[600000+1000]
[ 584.492171] a.out[1878]: segfault at 600874 ip 0000000000600874 sp 00007ffc6b0d2358 error 15 in a.out[600000+1000]
# sysctl -w debug.exception-trace=0
debug.exception-trace = 0
# ./a.out
Segmentation fault
# dmesg
[ 539.421736] a.out[1875]: segfault at 600874 ip 0000000000600874 sp 00007ffed85e7018 error 15 in a.out[600000+1000]
[ 584.492171] a.out[1878]: segfault at 600874 ip 0000000000600874 sp 00007ffc6b0d2358 error 15 in a.out[600000+1000]
마지막 세그폴트는 기록되지 않습니다.