由於在紅寶石寶石中可能有很多ghost方法,我認爲研究ruby寶石的內部機制並不是一個好主意,靜態讀取其源代碼。有沒有辦法將第三方gem的源文件附加到正在運行的ruby進程進行調試,以便我可以設置中斷點並查看事件如何動態工作?
順便說一句,我試着導航到RubyMine中第三方gem的源文件,方法是點擊'require'語句的上下文菜單「Go To-> Implementations」或第三方gem的其他符號(例如,require 'watir'
),但沒有成功。動態類型語言(如Ruby)的IDE無法通過符號導航正常嗎?在ruby中調試第三方gems的最佳方法
回答
我很想知道,如果有更好的方式來做到這一點,但它是如何我通常做的是:
- 添加紅寶石調試寶石到您的Gemfile(或者,如果你是紅寶石debug19在Ruby 1.9.2上)
- 通過做
bundle show gemname
找到寶石。我在Mac上,所以我通常將其傳送給pbcopy,以便將其複製到剪貼板。bundle show rails | pbcopy
- 在您喜歡的編輯器中打開gem目錄。
mvim /path/to/gem/directory
- 導航到要放置斷點*的文件和行,並在有問題的行上面插入
debugger
。 - 刷新頁面,運行測試,或做任何你會獲得寶石文件來執行
- 當執行在調試器停止時,你可以檢查變量(
p variable_name
),並通過與ruby debugger commands線動線。
*知道往哪裏放斷點可以利用代碼的一些瞭解,但你應該在LIB/gemname.rb
在這種改變的代碼在運行時,像Ruby語言,是很難準確預測100%的符號,方法等的起源
我處理很多需要的源代碼分析第三方寶石和我發現這個任務的最佳工具是Netbeas +它是Ruby和Rails插件。
- 允許在從屬寶石源代碼良好的導航(不像其他的替代品)
- 視覺斷點和調試實際工作(在跟蹤和所有)**
**它有一些小問題與方法調用產生的代碼塊(如每個{}),但我學會了處理這些
我通常做的是設置斷點並在運行時分析代碼。
我會避免編輯寶石文件,在目前接受的答案建議開始。相反,將debugger
命令放入其中一個應用程序文件中,並使用break
命令在gem中設置斷點。我使用rvm
有gemset
所以這裏是我如何做到這一點:
break /Users/chris/.rvm/gems/rub[email protected]<gemset>/gems/<gem_name>-<gem-version>/<path_to_file>:<line_number>
如果他們使用相同的Gem,接受的答案是否會干擾同一臺機器上的其他應用程序?如果是這樣,這個解決方案似乎可以避免這個問題。 – flyingL123 2015-09-25 05:43:16
是的。這就是整個問題。除非你沒有選擇,否則我會避免不惜一切代價編輯Gem文件,除非你願意分叉它們 – 2015-11-07 16:31:47
- 1. Ruby on Rails:測試對第三方API調用失敗的最佳方法
- 2. 在Ruby中重寫第三方方法
- 3. 在ruby中模擬第三方對象的最佳方法是什麼?
- 4. 在第三方DLL中調用方法
- 5. 緩存第三方API調用的最佳做法是什麼?
- 6. 在Visual Studio中調試第三方DLL?
- 7. 在VS 2008中存儲第三方DLL的最佳方式+
- 8. 在Android Studio中集成第三方庫的最佳方式
- 9. 從NuGet更新現有第三方引用的最佳方法
- 10. 調試Windows CGI的最佳方法
- 11. 調試NavigationService.GoBack()問題的最佳方法?
- 12. 調試異常的最佳方法
- 13. 在OSGi包中添加第三方maven依賴項的最佳方法
- 14. Rails第三方API調用的最佳實踐?
- 15. 調用第三方類方法
- 16. 在您的網站上爲第三方html提供服務的最佳方法?
- 17. 在django中實現只調試中間件的最佳方法
- 18. 在庫中包裝第三方服務的最佳實踐
- 19. 在ES/CQRS中獲取第三方數據的最佳位置
- 20. 在Android中緩存圖像的最佳第三方工具?
- 21. 第三方軟件API的單元測試的最佳做法(AutoCAD)
- 22. Android Proguard - 保持所有第三方庫的最佳做法?
- 23. 從第三方提供商接收JWT的最佳做法?
- 24. 管理第三方開源庫變更的最佳做法?
- 25. 什麼是當前設置第三方cookie的最佳方式?
- 26. 在eclipse中調試Mojarra和Primefaces的最佳方法是什麼?
- 27. 在OOP中有一個調試器類的最佳方法?
- 28. 在Ruby中模擬枚舉的最佳方式? (第二部分)
- 29. 在不同視圖中調用方法的最佳方法?
- 30. 最佳實踐使用第三方庫在JBoss中OSGI
感謝。這很好。 FWIW,我用[Pry](https:// rubygems。org/gems/pry)而不是ruby-debug,這也起作用。 – 2015-05-11 17:03:17
如果他們使用相同的Gem,會在同一臺機器上中斷其他應用程序嗎? – flyingL123 2015-09-25 05:42:13
@ flyingL123,我想如果它們在調試模式下作爲你的應用運行,它會打斷他人。 – parzival 2017-05-11 15:35:34