なんかcore file size: cannot modify limit: Operation not permittedとか言われて変更できないことがある(参照)けど、どうにかする。
gdbでコアダンプ読む
12345
$ gdb -c /cores/core.1234
GNU gdb (GDB) 7.7.1
....
"/cores/core.1234": no core file handler recognizes format
(gdb)
とか言われて読み込みに失敗する。いったいなんなんだ(未解決)
検索すると普通にこれで読めるという説と対応してねえよという説があって謎。
コンパイルオプションをあれしてGDBであれする
12
# Makefile
CFLAGS = -g -O0 -ggdb
-ggdb でGDB用デバッグ情報を付与できる。
12345678
$ gdb ./ctags
...
Reading symbols from ./ctags...done.
(gdb) r -R ~/.vim
Starting program: ./ctags -R ~/.vim
Program received signal SIGSEGV, Segmentation fault.
0x00007fff8b85ef80 in ?? ()
フムー落ちた
スタックトレース見る
12345
(gdb) bt
#0 0x00007fff8b85ef80 in ?? ()
#1 0x00007fff5fbfee10 in ?? ()
#2 0x0000000100033fa8 in findVimTags () at vim.c:720
Backtrace stopped: frame did not save the PC
フレーム #2 の中身見る
123
(gdb) frame 2
#2 0x0000000100033fa8 in findVimTags () at vim.c:720
720 if ( strncmp ((const char*) line, "UseVimball", (size_t) 10) == 0 )
lineという変数怪しいですね
12
(gdb) p line
$1 = (const unsigned char *) 0x0
ヌル
で、ソースの該当箇所を見るとNULLチェック忘れてるということがわかる。
123456
line=readVimLine();// May returns NULLif(strncmp((constchar*)line,"UseVimball",(size_t)10)==0){parseVimBallFile(line);}