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]
最後のセグフォルトは記録されません。