我正在编写一个 Ruby C 扩展,并且经常需要运行 GDB 或 Valgrind 来查找错误。为了调试我的规格,我使用这个:
namespace :spec do
RSPEC_CMD = [ 'ruby', '-S', 'rspec', '-Ilib:ext', SPECDIR ]
desc "Run specs under GDB."
task :gdb => [ :compile ] do |task|
cmd = [ 'gdb' ] + GDB_OPTIONS
cmd += [ '--args' ]
cmd += RSPEC_CMD
run( *cmd )
end
desc "Run specs under Valgrind."
task :valgrind => [ :compile ] do |task|
cmd = [ 'valgrind' ] + VALGRIND_OPTIONS
cmd += RSPEC_CMD
run( *cmd )
end
end
不幸的是,这对 IRB 不起作用,因为 IRB 是 Ruby 脚本而不是可执行文件。
我想答案是非常微不足道的,但我不知道足够的 shell 魔法来自己弄清楚。
需要注意的是,我需要能够使用IRB(输入命令),而不仅仅是运行IRB。
那么在 GDB(或 Valgrind)中运行 IRB 的命令是什么?