2009-11-12 3 views
3

Ruby 용 웹 기반 디버거를 작성하고 있지만이 작업을 수행하려면 서버 측 Ruby 프로그램에서 Ruby 디버거를 호출 할 수 있어야합니다. 이것이 이제껏 끝났습니까? 이것은 가능한가?Ruby 1.9에서 루비 프로그램 내에서 루비 디버거를 프로그래밍 방식으로 호출하려면 어떻게해야합니까?

최종 제품을 빌드하면 웹 브라우저 만 사용하여 Ruby 코드를 편집하고 실행하고 단계적으로 실행할 수 있습니다. 디버깅 할 루비 코드는 서버 측에서 "평가"됩니다.

나는 popen 또는 expect를 사용하도록 제안한 stackoverflow 사용자 중 하나에 의해 올바른 방향으로 지적되었습니다. 나는이 두 가지를 모두 시도했지만 다음과 같은 문제를 겪었습니다.

popen : 콘솔을 기다리는 중에 디버그 콘솔의 출력 끝을 알리는 데 타임 아웃 블록을 사용해야합니다 (명령 줄 터미널에서이를 감지 할 수 있습니다. 왜 루비가 안되니?).

expect : 아래 프로그램에서 디버거 입력이 디버거와 동기화되지 않습니다. 왜 그런가요?

 
require 'pty' 
require 'expect' 

$expect_verbose = true 
PTY.spawn("rdebug deb.rb") do |from_debugger, to_debugger, pid| 

    a=nil 

    while (a != "end") do 

     from_debugger.expect(/\(rdb:1\)/) do |input| 

      a = gets 
      to_debugger.puts(a + "\n") 

     end 
     from_debugger.flush 
    end 

end 
+0

수 당신 세부 조금 더 당신이 뭘하려는 건지? – Geo

+0

웹 브라우저에서 루비 코드를 디버깅하려고하는데, 이것은 웹 기반 IDE의 일부입니다. – Zubair

답변

0

나는 마지막으로 사용하여이 작업을 수행하는 방법을 알아 냈 기대 :

 
require 'pty' 
require 'expect' 

PTY.spawn("rdebug deb.rb") do |output,input,pid| 
    while true do 
     begin  
      buffer = "" 
      puts "-------" 
      puts output.readpartial(1024,buffer) until buffer =~ /\(rdb:1\)/ 
      a = gets 
      input.puts a 
     rescue 
      break 
     end 
    end 
end 
1

나는 ruby-debug을 사용할 수 있다고 생각합니다. 나는 이것을 서버 측에서 동일한 스크립트를 열고 키 입력을 보내는 것으로 상상할 것이다. 나는 이것이 내가 그것을 할 수있는 방법이라고 생각한다.

이렇게하면 클라이언트가 양식에 코드를 붙여 넣을 수 있습니다. 선택적으로, 그는 어떤 줄에 중단 점이있는 버튼을 클릭 할 수 있습니다. 그런 다음 그는 모든 것을 제출합니다. 서버 측에서는 해당 양식을 처리하고 양식 내용으로 .rb 파일을 작성합니다. 그가 중단 점을 넣은 행에서 debugger 호출을 삽입합니다. 그럼 당신은 실행

ruby client_script.rb

과는 debugger 라인에 도달하면이 프로세스를 중지합니다. 나는 당신이 Expect for Ruby 또는 무엇이든을 가진 이것 전부를 할 것을 건의 할 것입니다. 따라서 클라이언트가 페이지에서 step over을 누르거나 변수를 검사하면 생성 한 프로세스에 키 입력을 보냅니다.

p x

및 해당 출력을 캡처해야하고 클라이언트의로 다시 보내 줄 : 그 변수 x의 값을 검사하고자하는 경우 예를 들어, 프로세스에이를 보낼 것 브라우저. Expectpopen과 비슷하지만 조금 더 좋습니다.

+0

예, 루비 디버그를 시도했지만 콘솔에서 수동으로 검사 만 할 수 있습니다. 중단 점에 도달하면 루비 프로그램이 수동으로 단계를 건너 뛰거나 변수를 조사 할 수있는 곳이 필요합니다. – Zubair

+0

죄송합니다. 올바르게 답변을 이해하지 못했습니다 ... 다시 읽습니다. "ruby-debug ". – Zubair

+0

실제로 "eval"ed 코드를 디버깅하길 원했기 때문에 ruby-debug를 사용하면 .rb 파일 만 디버깅 할 수 있으므로 문제가 될 수 있습니다. 나는 이것을 생각하는 것이 맞습니까? – Zubair