我不确定如何正确调试这个但是尝试了一些不同的方法,这些方法已经缩短了时间,但没有解决问题.我办公室中至少有4个人可以在相同的机器上执行此代码,并且安装了相同版本的ruby和rubygems且没有错误.
这是我正在执行的代码:
status = Open4::popen4( "swfmill simple stdin stdout" ) do | pid, stdin, stdout, stderr |
stdin.write( config )
stdin.close
bytes = stdout.read
errors = stderr.read
end
Run Code Online (Sandbox Code Playgroud)
我在这条线路上遇到"总线错误":
errors = stderr.read
Run Code Online (Sandbox Code Playgroud)
如果我评论该行,我会在此行上收到"Segementation Fault":
bytes = stdout.read
Run Code Online (Sandbox Code Playgroud)
我显然使用Open4库并执行外部进程.这个外部进程在直接从终端执行时非常有效,并且当这个Ruby代码在这个特定的Rails应用程序之外运行时,即使在不同的,更简单的Rails应用程序中也是如此.
要重现错误,我只需执行我的特定测试方法,如下所示:
ruby test/unit/swf_generator_test.rb --name test_get_bytes
Run Code Online (Sandbox Code Playgroud)
我在配备Intel Core 2 Duo 2.53 GHz和8GB RAM的MacBook Pro上运行Snow Leopard Mac OS X 10.6.2(10C540).
ruby -v && gem -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10.2.0]
1.3.5
Run Code Online (Sandbox Code Playgroud)
我在GDB中执行了这段代码,发现我的libxml和libxslt库都安装不正确.我能够安装这两个库,现在GDB不再告诉我任何我认为有用的东西.以下是GDB的当前输出:
gdb ruby
GNU gdb 6.3.50-20050815 (Apple version gdb-1344) (Fri Jul 3 …Run Code Online (Sandbox Code Playgroud)