2012-04-05 1 views
2

Ruby C 확장을 작성 중이며 버그를 찾으려면 GDB 또는 Valgrind를 자주 실행해야합니다. IRB는 루비 스크립트가 아닌 실행이기 때문에, IRB를 위해 작동하지 않습니다, 불행하게도irb 프로세스에서 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 수 있어야한다는 것입니다.

그래서 GDB (또는 Valgrind)에서 IRB를 실행하는 명령은 무엇입니까?

답변

1

나는 여기에 (which irb을 사용하여)/usr/bin/irb 파일을 보았을 때 첫 번째 줄에 새 파일 #!/usr/bin/ruby1.8이 있습니다 (즉,이 경우 /usr/bin/ruby1.8는 실제 실행 파일입니다). 파일 실행). 나는 또한

(gdb) run /usr/bin/irb 
Starting program: /usr/bin/ruby1.8 /usr/bin/irb 
[Thread debugging using libthread_db enabled] 
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". 
irb(main):001:0> print "Hello world\n" 
Hello world 
=> nil 
irb(main):002:0> 

:

$ gdb -- /usr/bin/ruby1.8 

을 그리고 당신은 따라서 당신에게 IRB 프롬프트를주는 루비에 대한 인수로는/usr/빈/IRB를 지정할 수 있습니다 : 그래서 당신은 GDB에게 그것을 줄 것이다 이 한 줄 찾기가 나를 위해 일한다는 것을 발견하십시오.

$ gdb -ex run --args /usr/bin/ruby1.8 /usr/bin/irb