| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Ruby: Общие вопросы > Debugging, какими средствами пользоваться |
| Автор: fell 28.7.2010, 11:34 |
| Понадобилось давеча провести debugging одного файла. Конкретнее http://github.com/rails/rails/blob/master/activesupport/lib/active_support/dependencies.rb строка 457 trace = caller.reject {|l| l =~ %r{#{Regexp.escape(__FILE__)}}} вот как бы добраться до переменной trace и посмотреть ее значение ? обычно использую ruby -r debug file.rb. Но если ставить breakpoint в этом месте ( строка 457) то дебагер выкидывает. Пробовал через next и step добраться, дохожу до функции и перепрыгивает с одной функции на другую, в саму функцию не входит. Может есть какие то другие программулины, методы и способы ? посоветуйте... |
| Автор: source777 28.7.2010, 23:49 |
Ну способов масса, от банального puts trace.inspect в следующей строке, до навороченных IDE типа NetBeans и RubyMine. P.S. один топик - один вопрос |
| Автор: fell 29.7.2010, 10:00 |
| от навороченных IDE никого толку, они используют тот же debug... подскажите конкретно, как вывести значение переменной в примере ? |
| Автор: source777 31.7.2010, 17:18 |
Просто тебе будет проще поставить брейкпоинт и посмотреть значения переменных. ruby-debug работает без проблем, но вот с консольным интерфейсом справляются далеко не все и ты тут не исключение. puts trace.inspect из консоли отладчика Другое дело, что отладчик может просто не дойти до нужной строки, а экстрасенсы все в отпуске... поэтому никто не знает, что именно ты пытаешься отдебажить и насколько сообразно этому запускаешь отладчик. Кстати указанная в топике строка имеет номер 464, а не 457. |
| Автор: fell 31.7.2010, 19:09 |
| да строка 464 Что я хотел увидеть, это значение переменной trace. Я об этом писал в самом начале, причем тут экстрасенсы не очень понятно, может нужно немного внимательнее читать текст .... Отладчик и не доходит до нужной точки, брекпойнт на это строку я выставлял, программа просто завершается и выкидывает в консоль. |
| Автор: fell 2.8.2010, 18:23 |
| действия стандартные ruby -r debug file.rb list 1-644 b 464 c и тут выкидывает в консоль. По-моему цель вполне ясная, вывести значение переменной trace. Лучше бы показали как это можно сделать, если это возможно и каким способом это сделать. |
| Автор: bilbobagginz 3.8.2010, 22:41 |
| fell, блоки я бы развернул на несколько строк. разбил бы на промежопочные куски. каждый { } на do |l| end |
| Автор: source777 7.8.2010, 13:24 | ||||
Что за файл file.rb? Если ты пытаешься запустить отдельно сам dependencies.rb, то из этого ничего путного выйти не должно. Да и с какой стати я должен гадать, как ты там отлаживаешь, если ты сам этого рассказать не желаешь. Ты даже не написал с какой ошибкой вылетает отладчик. А если под "вылетает" подразумевается завершает работу в штатном режиме, то значит поток управления просто ни разу не зашёл в функцию load_missing_constant. Да какая ж это нафиг цель? Это даже на полноценный шаг на пути к цели не тянет, т.е. либо ты сам не знаешь для чего тебе это надо, либо просто решил попридуриваться на форуме. Так как от тебя не удалось выведать никакой информации о том, что ты делаешь. Придётся без объяснений и разбора ошибок рассказать как надо делать: Раз уж тебе так нравится file.rb, то внутри у него должно быть нечто подобное
|
| Автор: fell 13.8.2010, 18:11 | ||||
товарищ эксперт, вы наверно после работы читаете форум, на работе сильно устаете и плохо соображаете... я писал в предыдущем посте, что именно происходит и что я конкретно делаю. Да file.rb просто как пример привел, вместо file.rb был dependecies.rb. О чем я писал вообще в начале топика. Придуриваться по таким серьезным вопросам вообще не имел ни какого желания.
почти то что надо ... ps. поскольку кроме вас тут руби никто не интересуется, да и вы отвечаете на вопросы скорее из необходимости, как модератор ветки, больше отвлекать вас глупыми темами и вопросами не буду... |
| Автор: source777 16.8.2010, 11:44 | ||
Неа, не писал. Ты написал, что хочешь поставить точку останова внутри dependecies.rb, но то что ты непосредственно его пытаешься запустить в отладчике про это не было ни слова. А догадаться о столь нелогичном действии ой как не просто |