トップページへ

mmapしたメモリの値がcoreに出力されない場合の対処

小粋空間 » Linux » mmapしたメモリの値がcoreに出力されない場合の対処

mmapしたメモリの値がcoreに出力されない場合の対処方法を紹介します。

1.問題点

C/C++プログラムがセグメンテーションフォルトしたとき、mmapしたメモリをgdbで参照したときに、値を設定しているにもかかわらず、0しか表示されない事象が発生しました。

2.対処方法

/proc/PID/coredump_filterを書き替えることで実現できるようです。

プログラム動作時のcoredump_filterは次のようになっています。

# cat /proc/6235/coredump_filter
00000033

33をビット展開すると

0011 0011

となります。

この0~6ビットで何を出力するかが決まります。

各ビットのそれぞれの意味は次の通りです。

mmapしたデータを出力するには2ビット目または3ビット目に1を設定する必要があるので、両方のビットに1を設定するには、

0011 1111

つまり000003fにする必要があります。

このファイル、vimでは書き替えられないようなので、リダイレクトで書き替えます。

# echo 63 > /proc/6235/coredump_filter
# cat /proc/6235/coredump_filter
0000003f

« 前の記事へ

次の記事へ »

トップページへ