スクリプト実行中にabort(3)
スクリプト実行中に任意の場所でcoreを取得できたら、Rubyの内部解析に便利じゃないでしょうか。
ということで、いきなりabort(3)を呼び出す拡張ライブラリを書いてみました。
ファイルextconf.rb
require 'mkmf' create_makefile('rawabort')
ファイルrawabort.c
#include <stdlib.h> #include <ruby.h> static VALUE rawabort(void) { abort(); /* NOTREACHED */ return Qnil; } void Init_rawabort(void) { rb_define_global_function("rawabort", rawabort, 0); }
コンパイル方法。
$ ls extconf.rb rawabort.c $ ruby extconf.rb creating Makefile $ make cc -fPIC -O2 -I/usr/include -fPIC -pipe -I. -I/usr/pkg/lib/ruby/1.8/i386-netbsdelf -I/usr/pkg/lib/ruby/1.8/i386-netbsdelf -I. -I/usr/include -c rawabort.c cc -shared -L'/usr/pkg/lib' -Wl,-R'/usr/pkg/lib' -o rawabort.so rawabort.o -Wl,-R -Wl,/usr/pkg/lib -L/usr/pkg/lib -L. -lruby18 -lpthread -lcrypt -lm -lc
実行例。
$ ruby -r rawabort -e rawabort zsh: abort (core dumped) ruby -r rawabort -e rawabort $ gdb ruby ruby18.core ...