2013-04-07 61 views
3

有了這個最小的Ruby代碼:硬編碼「需要‘調試’」找不到的資源文件

require 'debug' 
puts 

在一個文件調用,例如script.rb

如果我啓動它,像這樣:在調試提示ruby -rdebug script.rb

,然後按l,我得到的上市,預期

,如果我不是正常運行它ruby script.rb

l當我得到:

(rdb:1) l 
[-3, 6] in script.rb 
No sourcefile available for script.rb 

錯誤消息似乎英里最好的進展:工作目錄沒有改變,並且文件肯定還在那裏!

我無法找到關於這種行爲的文件(我試過兩個JRuby和MRI和行爲是一樣的)

我知道「調試」和「撬」,但他們所服務不同的使用情況:

我已經習慣了其他腳本語言有一個內置的調試模塊,可以讓我把一份聲明中任何地方的代碼給我打電話的調試環境,檢查代碼,變量和這樣的......它的內在優勢在於它可以在任何地方使用,而無需爲它設置環境,甚至當我在不屬於我自己的機器上時

我可以始終在呼喚與-rdebug解釋和手動設置斷點顯然解決這個,但我覺得這比其他

回答

2

尋找到調試源代碼後,我發現了一個變通方法和修復:

解決方法可以是:

trace on 
next 
trace off 
list 

,這將讓你獲得上市而不-rdebug重新解釋,缺點是你會從跟蹤中得到一些不需要的輸出,並且只有在移動一條語句之後才能看到它。

對於修復:問題在於SCRIPT_LINES__哈希缺少當前文件的值...顯然這只是內部設置tracer.rb

我已經改變了line 161,並與跟蹤,其中[] =已從稱爲子類改變了哈希,我是不是能夠挖出實際的代碼,做的工作當進入一個來自不同文件的函數時

另外:我還沒有發現一個人主動使用這個模塊(我在freenode上同時詢問了#ruby,#jruby和#pry),並且一起事實上它使用function that is now obsolete這讓我對這個模塊的維護狀態有點悲觀

但是,我提交了一個pull request for the fix(其實它非常愚蠢和簡單,但除此之外,我需要更深入地理解這個模塊,並且可能重構它的某些部分......但是如果這個模塊沒有被主動維護,我不確定這是一件很好的事情)

1

我懷疑Ruby解釋更多的工作不具備的能力加載沒有調試模塊中的組件的源文件。所以,沒有-rdebug,不能訪問源文件。我同意這是一個誤導性的錯誤。 「未加載調試功能」可能會更好。

+0

因此,只要開始讀取文件,調試模塊就不可用......但只要'需要'調試''它應該是,沒有'它呢? 我測試了你的假設,通過需要另一個文件並進入:並且確實有效,所以顯然問題在於調試模塊無法正確初始化從 調用的相同上下文的數據,您認爲這應該被報告爲一個錯誤? – berdario 2013-04-08 11:16:35