LINUX.ORG.RU

Отладка не только собственного кода

 ,


0

1

Если честно, с Perl-дебаггером сильно на «Вы», но вот понадобилось мне понять, какие значения принимают переменные криво написанного стороннего модуля (реализующего Log::Log4perl PatternLayout) в тот момент, когда он мне сообщает об ошибке.

То есть там имеется объект-инстанс класса, у него вызывается метод... и этот метод работает очевидно некорректно.

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

Собственно, в стандартном дебаггере я вижу, как ставить точку останова внутри своего кода, но непонятно, как её поставить внутри подключаемого каким-нибудь use'ом стороннего или своего модуля?

★★★★★

Offtop:
Вот поэтому программисты используют IDE, а не vim.

Stahl ★★☆ ()

Возможно, поставить ее перед вызовом стороннего метода и сделать s?

Nervous ★★★ ()
Ответ на: комментарий от Stahl

Вот поэтому программисты используют IDE, а не vim.

За всех-то не говори

yoghurt ★★★★★ ()

переписать на c, и затем отлаживать

anonymous ()
Ответ на: комментарий от yoghurt

А я за всех и не говорю. Я только от лица всех программистов говорю.

Stahl ★★☆ ()
Ответ на: комментарий от yoghurt

Это не буквоедство. Это довольно-таки злой сарказм. Но видимо он прошёл мимо. Ладно. Бывает.

Stahl ★★☆ ()
Последнее исправление: Stahl (всего исправлений: 1)
Ответ на: комментарий от entefeed

Ого, нормальный и удобный интерфейс к дебаггеру нужен лишь формошлёпам. Настоящие программисты «хренак, хренак и в продакшн». Так?
Что ты, явоскриптер, знаешь о программистах? Может ты ещё думаешь, что они живут в норах на деревьях и питаются асбестовой кашей? :)

Stahl ★★☆ ()
Ответ на: комментарий от Stahl

явоскриптер

Ниугадал. Хотя какой дедукции можно ожидать от формошлепа, который без раздутого ИДЕ и helloworld написать не может.

entefeed ☆☆☆ ()
Ответ на: комментарий от Stahl

Уже несколько лет не пользуюсь отладчиком в своем основном проекте - знание кода, тесты и хорошие логи делают свое дело.

ricie ()
Ответ на: комментарий от entefeed

Ну значит вовсе студент, пишущий код в гордом одиночестве и считающий что в программе не может быть больше пары тысяч строк кода.

Stahl ★★☆ ()
Ответ на: комментарий от Stahl

«Отладчик (не)нужен»: платиновые треды лора, том 2.

Настоящие программисты дебаггером не пользуются, ибо их код работает под десятком вочдогов.

fmdw ()

из http://perldoc.perl.org/perldebug.html:

S [[!]regex]

List subroutine names [not] matching the regex.

....

b subname [condition]

Set a breakpoint before the first line of the named subroutine.

....

x [maxdepth] expr

Evaluates its expression in list context and dumps out the result in a pretty-printed fashion.

....

s [expr]

Single step. Executes until the beginning of another statement, descending into subroutine calls.

....

y [level [vars]]

Display all (or some) lexical variables (mnemonic: mY variables) in the current scope or level scopes higher.

vividsnow ()
Ответ на: комментарий от Nervous

В дабеггере я «вижу» (по команде l) только свой собственный код - вернее даже просто код того, что на С было бы void main.

А вот как перейти в код стороннего модуля - непонятно.

Кстати, может быть, кто-то итак знает решение моей проблемы и мне вообще не нужно в дебаггер залезать... :)

У меня в Log::Log4perl почему-то не получается использовать %X{key} вместе с DBI-аппендером. Вдруг кто сталкивался с этим?

Настройки аппендера:

log4perl.appender.DBI=Log::Log4perl::Appender::DBI
log4perl.appender.DBI.datasource=DBI:mysql:database=dbd_log;host=localhost;port=3306
log4perl.appender.DBI.username=XXXXX
log4perl.appender.DBI.password=YYYYY
log4perl.appender.DBI.sql=INSERT INTO db VALUES (?,?,?,?,?,?,?,?,?)
log4perl.appender.DBI.params.1=%d{yyyy-MM-dd HH:mm:ss}
log4perl.appender.DBI.params.2=%p
log4perl.appender.DBI.params.3=%c
log4perl.appender.DBI.params.4=%F
log4perl.appender.DBI.params.5=%L
log4perl.appender.DBI.params.6=%Х{dbId}
log4perl.appender.DBI.params.7=%Х{procId}
log4perl.appender.DBI.params.8=%Х{status_code}
log4perl.appender.DBI.usePreparedStmt=1
log4perl.appender.DBI.layout=Log::Log4perl::Layout::NoopLayout
log4perl.appender.DBI.warp_message=0

DRVTiny ★★★★★ ()
Последнее исправление: DRVTiny (всего исправлений: 1)

Welcome

http://www.softpanorama.org/Scripting/Perlorama/perl_debugging.shtml

И да, там есть отсылка на книгу... прочтешь, изучишь и будешь мега-гуру по perl debugger'у. Но только на одну неделю, потом все забудешь :)

Книга стоящая.

gh0stwizard ★★★★★ ()
Последнее исправление: gh0stwizard (всего исправлений: 1)
Ответ на: комментарий от DRVTiny

Я ни хрена не понял, что тут написано, но %Х - это какой-то хэш? Тогда разве не $X{key}?

Nervous ★★★ ()
Ответ на: комментарий от Stahl

Потому что среды разработки и языки убоги? Да, в таких случаях только ИДЕ, только хардкор.

loz ★★★★★ ()
DB<1> b Ext::Module::function
DB<2> c

с XS модулями сложнее.

arto ★★ ()
Ответ на: комментарий от Nervous

%X - да, это некий хеш MDC в терминологии Log::Log4perl. Ссылаться на него в конфиге нужно именно так: %X{stored_key}, чтобы получить stored_value, ранее помещённый в коллекцию MDC операцией добавления элемента put.

DRVTiny ★★★★★ ()
Ответ на: комментарий от arto

Спасибо огромное!

А есть ли какая-то возможность перемещаться между модулями в дебаггере, чтобы увидеть не только код main'а?

DRVTiny ★★★★★ ()
Ответ на: комментарий от Stahl

Вот поэтому программисты используют <что-угодно>, а не perl.

fixed

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.