На CPAN есть и другие модули такие, как Devel::TraceCalls и Debug::Trace, но Devel::TraceCalls неудобный в использовании(хотя очень мощный), Debug::Trace - удобный и простой, но не хватает функционала.
Debug::LTrace за основу взял удобное API Debug::Trace, но дополнительно поддерживает:
- Лексически ограниченный трейсинг(трейсит пока существует объект-трейсер)
- Стандартная функция caller отрабатывает нормально
- Трейсинг целых модулей (используя '*' для обозначения всех функций в модуле)
- Улучшенный вывод информации (дерево вложеностей)
- Больше отладочной информации (время выполнения, контекст вызова...)
Пример вывода:
TRACE C: /-FOO::out_outer() called at example.pl line 15 package FOOTRACE C: | /-FOO::outer(2,{'aaa' => {'yyy' => 'ARRAY(0x7fe610)','qqq' => 'www'}}) called at example.pl line 49 sub FOO::out_outerTRACE C: | | /-FOO::inner(3) called at example.pl line 32 sub FOO::outerTRACE C: | | | /-FOO::Dumper(3) called at example.pl line 39 sub FOO::innerTRACE R: | | | \_FOO::Dumper(3) [VOID] in 3.5e-05 secTRACE C: | | | /-FOO::inner2(3) called at example.pl line 40 sub FOO::innerTRACE R: | | | \_FOO::inner2(3) [VOID] in 1.4e-05 secTRACE R: | | \_FOO::inner(3) [VOID] in 0.000213 secTRACE C: | | /-FOO::inner2(4) called at example.pl line 33 sub FOO::outerTRACE R: | | \_FOO::inner2(4) [VOID] in 1.5e-05 secTRACE R: | \_FOO::outer(2,{'aaa' => {'yyy' => 'ARRAY(0x7fe610)','qqq' => 'www'}}) [VOID] in 0.000417 secTRACE C: | /-FOO::inner(111) called at example.pl line 50 sub FOO::out_outerTRACE C: | | /-FOO::Dumper(111) called at example.pl line 39 sub FOO::innerTRACE R: | | \_FOO::Dumper(111) [VOID] in 3.5e-05 secTRACE C: | | /-FOO::inner2(111) called at example.pl line 40 sub FOO::innerTRACE R: | | \_FOO::inner2(111) returned: (112) in 4.4e-05 secTRACE R: | \_FOO::inner(111) returned: (112) in 0.000276 secTRACE R: \_FOO::out_outer() [VOID] in 0.00088 secTRACE C: /-FOO::recurse(1) called at example.pl line 25 package FOOTRACE C: | /-FOO::recurse(2) called at example.pl line 58 sub FOO::recurseTRACE C: | | /-FOO::recurse(3) called at example.pl line 58 sub FOO::recurseTRACE C: | | | /-FOO::recurse(4) called at example.pl line 58 sub FOO::recurseTRACE C: | | | | /-FOO::recurse(5) called at example.pl line 58 sub FOO::recurseTRACE R: | | | | \_FOO::recurse(5) returned: (6) in 4.8e-05 secTRACE R: | | | \_FOO::recurse(4) returned: (6) in 0.000177 secTRACE R: | | \_FOO::recurse(3) returned: (6) in 0.00032 secTRACE R: | \_FOO::recurse(2) returned: (6) in 0.00044 secTRACE R: \_FOO::recurse(1) returned: (6) in 0.000562 secTRACE C: /-BAR::Dumper([1]) called at example.pl line 70 package BARTRACE R: \_BAR::Dumper([1]) [VOID] in 3.8e-05 sec
0 коммент.:
Отправить комментарий
Не забудьте добавить себя в постоянные читатели и включить уведомления о новых комментариях, либо воспользуйтесь RSS каналом ;)