Shusakuです。

VC8 (VC++ 2005) でデバッグビルドした stable-snapshot の
"ruby 1.8.5 (2006-07-26) [i386-mswin32_80]" で次のコードを
実行すると、assertion failure が発生してしまいます。

require 'net/http'
str = Net::HTTP.get('www.ruby-lang.org', '/ja/')
puts str

リリースビルドでは問題なく実行が完了するのですが、
現在、ruby を LoadLibrary する DLL をデバッグしており、
デバッグビルドした ruby を使いたいと思うのですが、
この assertion failure を引き起こす原因は何でしょうか?

表示されるダイアログの内容は、このようになっています。

|  Microsoft Visual C++ Debug Library
|  Debug Assertion Failed!
|
|  Program: C:\Ruby\bin\ruby.exe
|  File: osfinfo.c
|  Line: 315
|
|  Expression: (_osfile(fh) & FOPEN)

デバッガの「呼び出し履歴」の一部を抜粋しておきます。

|> msvcr80d.dll!_get_osfhandle(int fh=0x00000004)  行 315 + 0x49 バイト
|  msvcr80-ruby18d.dll!rb_w32_fclose(_iobuf * fp=0x10310c50)  行 3531
|  msvcr80-ruby18d.dll!fptr_finalize()  行 2194 + 0x8 バイト
|  msvcr80-ruby18d.dll!rb_io_close(unsigned long io=0x02a2c02c)  行 2253+0x19 バイト
|  msvcr80-ruby18d.dll!rb_io_close_m()  行 2287 + 0x6 バイト
|  msvcr80-ruby18d.dll!call_cfunc()  行 5659 + 0x3 バイト
|  msvcr80-ruby18d.dll!rb_call0()  行 5812 + 0x17 バイト

自分の開発環境は VC6 と VC8 なのですが、現在デバッグしている
DLL のソースコードが VC7.x 以降でないとコンパイルできず、
さらに VC8 では ruby 1.8.4 のコンパイルがエラーになるので、
stable-snapshot (1.8.5) を利用しています。
snapshot (1.9.0) でも同様のエラーになりました。

-- 
Shusaku <tsyk / yk.rim.or.jp>