Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Debugging, какими средствами пользоваться 
:(
    Опции темы
fell
Дата 28.7.2010, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 17.12.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Понадобилось давеча провести debugging одного файла. Конкретнее

http://github.com/rails/rails/blob/master/...dependencies.rb
строка 457
trace = caller.reject {|l| l =~ %r{#{Regexp.escape(__FILE__)}}}
вот как бы добраться до переменной trace и посмотреть ее значение ?

обычно использую ruby -r debug file.rb. Но если ставить breakpoint в этом месте ( строка 457) то дебагер выкидывает. Пробовал через next и step добраться, дохожу до функции и перепрыгивает с одной функции на другую, в саму функцию не входит. Может есть какие то другие программулины, методы и способы ? посоветуйте...




Это сообщение отредактировал(а) fell - 29.7.2010, 10:00
PM MAIL WWW   Вверх
source777
Дата 28.7.2010, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(fell @  28.7.2010,  11:34 Найти цитируемый пост)
Может есть какие то другие программулины, методы и способы ?

Ну способов масса, от банального puts trace.inspect в следующей строке, до навороченных IDE типа NetBeans и RubyMine.

P.S. один топик - один вопрос

Это сообщение отредактировал(а) source777 - 28.7.2010, 23:50


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
fell
Дата 29.7.2010, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 17.12.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



от навороченных IDE никого толку, они используют тот же debug... 
подскажите конкретно, как вывести значение переменной в примере ?
PM MAIL WWW   Вверх
source777
Дата 31.7.2010, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(fell @  29.7.2010,  10:00 Найти цитируемый пост)
от навороченных IDE никого толку, они используют тот же debug... 

Просто тебе будет проще поставить брейкпоинт и посмотреть значения переменных. ruby-debug работает без проблем, но вот с консольным интерфейсом справляются далеко не все и ты тут не исключение.


Цитата(fell @  29.7.2010,  10:00 Найти цитируемый пост)
подскажите конкретно, как вывести значение переменной в примере ? 

puts trace.inspect из консоли отладчика
Другое дело, что отладчик может просто не дойти до нужной строки, а экстрасенсы все в отпуске... поэтому никто не знает, что именно ты пытаешься отдебажить и насколько сообразно этому запускаешь отладчик.
Кстати указанная в топике строка имеет номер 464, а не 457.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
fell
Дата 31.7.2010, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 17.12.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



да строка 464
Что я хотел увидеть, это значение переменной trace.  Я об этом писал в самом начале, причем тут экстрасенсы не очень понятно, может нужно немного внимательнее читать текст ....
Отладчик и не доходит до нужной точки, брекпойнт на это строку я выставлял, программа просто завершается и выкидывает в консоль. 
PM MAIL WWW   Вверх
source777
Дата 2.8.2010, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(fell @  31.7.2010,  19:09 Найти цитируемый пост)
Я об этом писал в самом начале, причем тут экстрасенсы не очень понятно

А притом, что в твоих действиях есть причина почему отладчик не доходит до желаемой строки, однако действия эти известны только тебе и экстрасенсам.  smile 


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
fell
Дата 2.8.2010, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 17.12.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



действия стандартные

ruby -r debug file.rb
list 1-644
b 464
c

и тут выкидывает в консоль.

По-моему цель вполне ясная, вывести значение переменной trace. Лучше бы показали как это можно сделать, если это возможно и каким способом это сделать.

PM MAIL WWW   Вверх
bilbobagginz
Дата 3.8.2010, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



fell, блоки я бы развернул на несколько строк.
разбил бы на промежопочные куски.

каждый { } на 
do |l|

end




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
source777
Дата 7.8.2010, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(fell @  2.8.2010,  18:23 Найти цитируемый пост)
ruby -r debug file.rb

Что за файл file.rb? Если ты пытаешься запустить отдельно сам dependencies.rb, то из этого ничего путного выйти не должно. Да и с какой стати я должен гадать, как ты там отлаживаешь, если ты сам этого рассказать не желаешь. Ты даже не написал с какой ошибкой вылетает отладчик.
А если под "вылетает" подразумевается завершает работу в штатном режиме, то значит поток управления просто ни разу не зашёл в функцию load_missing_constant. 

Цитата(fell @  2.8.2010,  18:23 Найти цитируемый пост)
По-моему цель вполне ясная, вывести значение переменной trace.

Да какая ж это нафиг цель? Это даже на полноценный шаг на пути к цели не тянет, т.е. либо ты сам не знаешь для чего тебе это надо, либо просто решил попридуриваться на форуме.

Так как от тебя не удалось выведать никакой информации о том, что ты делаешь. Придётся без объяснений и разбора ошибок рассказать как надо делать:
Раз уж тебе так нравится file.rb, то внутри у него должно быть нечто подобное
Код

require 'rubygems'
require 'active_support/dependencies'
ActiveSupport::Dependencies.load_missing_constant ActiveSupport, 'Missed'


Код

$ ruby -r debug file.rb
Debug.rb
Emacs support available.

file.rb:1:require 'rubygems'
(rdb:1) b /home/source777/.rvm/gems/ruby/1.9.1/gems/activesupport-3.0.0.beta3/lib/active_support/dependencies.rb:446
Set breakpoint 1 at /home/source777/.rvm/gems/ruby/1.9.1/gems/activesupport-3.0.0.beta3/lib/active_support/dependencies.rb:446
(rdb:1) c
Breakpoint 1, load_missing_constant at /home/source777/.rvm/gems/ruby/1.9.1/gems/activesupport-3.0.0.beta3/lib/active_support/dependencies.rb:446
/home/source777/.rvm/gems/ruby/1.9.1/gems/activesupport-3.0.0.beta3/lib/active_support/dependencies.rb:446:      name_error = NameError.new("uninitialized constant #{qualified_name}")
(rdb:1) puts trace.inspect
["file.rb:3:in `<main>'"]


Это сообщение отредактировал(а) source777 - 7.8.2010, 13:27


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
fell
Дата 13.8.2010, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 17.12.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата

Ты даже не написал с какой ошибкой вылетает отладчик.


товарищ эксперт, вы наверно после работы читаете форум, на работе сильно устаете и плохо соображаете...
я писал в предыдущем посте, что именно происходит и что я конкретно делаю. Да file.rb просто как пример привел, вместо file.rb был dependecies.rb.
О чем я писал вообще в начале топика. Придуриваться по таким серьезным вопросам вообще не имел ни какого желания. 

Код

file.rb:1:require 'rubygems'
(rdb:1) b /home/source777/.rvm/gems/ruby/1.9.1/gems/activesupport-3.0.0.beta3/lib/active_support/dependencies.rb:446
Set breakpoint 1 at /home/source777/.rvm/gems/ruby/1.9.1/gems/activesupport-3.0.0.beta3/lib/active_support/dependencies.rb:446
(rdb:1) c
Breakpoint 1, load_missing_constant at /home/source777/.rvm/gems/ruby/1.9.1/gems/activesupport-3.0.0.beta3/lib/active_support/dependencies.rb:446
/home/source777/.rvm/gems/ruby/1.9.1/gems/activesupport-3.0.0.beta3/lib/active_support/dependencies.rb:446:      name_error = NameError.new("uninitialized constant #{qualified_name}")
(rdb:1) puts trace.inspect
["file.rb:3:in `<main>'"]


почти то что надо ...
ps.
поскольку кроме вас тут руби никто не интересуется, да и вы отвечаете на вопросы скорее из необходимости, как модератор ветки, больше отвлекать вас глупыми темами и вопросами не буду... 
PM MAIL WWW   Вверх
source777
Дата 16.8.2010, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(fell @  13.8.2010,  18:11 Найти цитируемый пост)
Да file.rb просто как пример привел, вместо file.rb был dependecies.rb.
О чем я писал вообще в начале топика.

Неа, не писал. Ты написал, что хочешь поставить точку останова внутри dependecies.rb, но то что ты непосредственно его пытаешься запустить в отладчике про это не было ни слова. А догадаться о столь нелогичном действии ой как не просто smile 


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.