Ponieważ może być dużo Ghost Methods wewnątrz rubinowego klejnotu, nie sądzę, że dobrze jest studiować wewnętrzny mechanizm rubinowego klejnotu właśnie przez czytanie statycznego kodu źródłowego. Czy istnieje sposób na dołączenie pliku źródłowego klejnotu trzeciej części do działającego procesu ruby w celu debugowania, aby można było ustawić punkt przełomowy i zobaczyć, jak rzeczy działają dynamicznie?
BTW, próbowałem przejść do pliku źródłowego klejnotu trzeciej części w RubyMine, klikając menu kontekstowe "Przejdź do-> Wdrożenia" instrukcji "wymagaj" lub innego symbolu klejnotu z trzeciej części (require 'watir'
na przykład), bez powodzenia. Czy to normalne, że IDE dynamicznego języka pisania, takiego jak Ruby, nie może nawigować symbolami?Najlepszy sposób na debugowanie klejnotów stron trzecich w rubinach
Odpowiedz
chciałbym wiedzieć, czy istnieje lepszy sposób to zrobić, ale jak zwykle zrobić to:
- Dodaj gem ruby-debug do Gemfile (lub ruby-debug19 jeśli jesteś na Ruby 1.9.2)
- Znajdź klejnot wykonując
bundle show gemname
. Jestem na komputerze Mac, więc zwykle przesyłam ten plik do pbcopy, aby został skopiowany do schowka.bundle show rails | pbcopy
- Otwórz katalog klejnotów w ulubionym edytorze.
mvim /path/to/gem/directory
- Przejdź do pliku i linii, w której chcesz umieścić punkt przerwania * i wstaw
debugger
powyżej linii. - Odśwież stronę, uruchom testy, czy cokolwiek by pobrać plik Gem wykonać
- Kiedy wykonanie zatrzymuje się debuggera, można kontrolować zmienne (
p variable_name
), a linia ruch po linii z ruby debugger commands.
* Wiedząc, gdzie umieścić punkt przerwania może podjąć pewne zrozumienie kodu, ale należy rozpocząć w lib/gemname.rb
W językach, które zmieniają się w czasie wykonywania kodu, takich jak Ruby, trudno jest dokładnie przewidzieć w 100% pochodzenie symboli, metod itp
mam do czynienia z dużą ilością kamieni szlachetnych osób trzecich, które wymagają analizy kodu źródłowego i Odkryłem, że najlepszym narzędziem do tego zadania jest Netbeas + to wtyczki Ruby i Rails.
- umożliwia dobrą nawigację w kodzie źródłowym perełki zależne (w przeciwieństwie do innych alternatyw)
- breakpoints wizualnych i debugowania, które faktycznie działa (z cienia i wszystko) **
** ma jakieś usterki z wywołaniami metod w wygenerowanych blokach kodu (jak każdy {}), ale nauczyłem się radzić sobie z tymi
Co zwykle robię jest ustawianie punktów przerwania i analizowanie kodu w czasie wykonywania.
chciałbym uniknąć edycji plików Gem jak zasugerowano w aktualnie akceptowanych odpowiedź. Zamiast tego umieść komendę debugger
w jednym z plików aplikacji i użyj polecenia break
, aby ustawić punkt przerwania w klejnocie. Używam rvm
z gemset
tak oto jak to zrobić:
break /Users/chris/.rvm/gems/[email protected]<gemset>/gems/<gem_name>-<gem-version>/<path_to_file>:<line_number>
Czy zaakceptowana odpowiedź przeszkadzałaby innym aplikacjom na tym samym komputerze, jeśli używają tego samego Klejnotu? Jeśli tak, wydaje się, że to rozwiązanie pozwoli uniknąć tego problemu. – flyingL123
Tak. O to chodzi. Jeśli nie masz opcji, unikałbym edycji plików Gem za wszelką cenę, chyba że chcesz je rozwidlić –
- 1. Biblioteki stron trzecich w CMake
- 2. Zarządzanie wewnętrznymi zależnościami stron trzecich
- 3. var_dump i umrze jak php, w rubinach na szynach (debugowanie w rubinach na szynach)
- 4. Java - Poczekaj na wątki stron trzecich, aby zakończyć
- 5. najlepszy sposób przekierowywania/ładowania stron w PHP
- 6. Jak uwzględnić biblioteki stron trzecich w CodeIgniter?
- 7. Zastąp zależności słownika stron trzecich w maven
- 8. Łączenie bibliotek stron trzecich w VS 2015
- 9. Najlepszy sposób na wykorzystanie wielu stron na Smarty
- 10. Łączenie bibliotek stron trzecich (libs.a) z NDK
- 11. Jak pobierać pliki .flow stron trzecich?
- 12. Dlaczego potrzebujemy narzędzi do budowania stron trzecich?
- 13. Uprawnienia na poziomie obiektu Django 1.2 - rozwiązania stron trzecich?
- 14. Najlepszy sposób implementacji wtyczki
- 15. Jak wyeliminować zewnętrzne ostrzeżenia lib/stron trzecich w GCC
- 16. Ciągłe monitorowanie i testowanie interfejsów API stron trzecich w Railsach
- 17. Skorzystaj z biblioteki stron trzecich (parse.com) w Angular 2
- 18. W jaki sposób biblioteki stron trzecich są zawarte w macierzystych modułach node.js?
- 19. Jak prawidłowo połączyć biblioteki stron trzecich w iOS
- 20. Jak zapobiec wyświetlaniu MessageBox przez bibliotekę stron trzecich?
- 21. Najlepszy sposób na tworzenie wielu stron na jednej stronie w codeigniter
- 22. Jakie są zagrożenia związane z hostowaniem Javascript stron trzecich?
- 23. blokowanie plików cookie stron trzecich - obejście (aplikacje Facebook itp.)
- 24. jak wyłączyć wykrywanie zmiany kąta 2 dla bibliotek stron trzecich
- 25. Samouczki przetwarzania obrazów C++ z użyciem biblioteki stron trzecich
- 26. AngularJS: debugowanie pustych stron interfejsu użytkownika
- 27. Zdalne debugowanie na serwerze
- 28. Jak uzyskać całkowitą liczbę stron istniejącego pliku pdf w rubinach na szynach?
- 29. Błąd kompilacji Coffeescript w rubinach na szynach
- 30. Najlepszy sposób na buforowanie json
Dzięki. Działa to świetnie. FWIW, użyłem tych instrukcji z [Pry] (https: // rubygems.org/gems/pry) zamiast ruby-debug i to działało również. –
Czy to przeszkadzałoby innym aplikacjom na tym samym komputerze, jeśli używają tego samego Klejnotu? – flyingL123
@ flyingL123, Przypuszczam, że spowoduje to przerwanie innych, jeśli będą działać w trybie debugowania jako aplikacja. – parzival