|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 22 Jul 2002 20:57:21 To : Andrey Sapozhnikov Subject : Re: stack trace -------------------------------------------------------------------------------- Здравствуй, Andrey Sapozhnikov. AS> > Вот есть штатный способ вывести stack trace в stderr или получить в строке AS> > исключения (Carp::cluck, Carp::confess). Hо хочется выбросить объект. AS> > Прицепить к нему цепочку caller - дурацкое дело нехитрое. А вот столь же AS> > просто получить ее вместе с аргументами? Как сложно - несложно подсмотреть AS> > в самом Carp от 5.005 (в 5.6.1 он уже отчетливо заныкан унутрь). AS> Я не совсем понял чего собственно хочется из этого письма. Hаписано, что AS> хочется выбросить выбросить объект, но что за объект и куда его выбросить? AS> Если ключевой была фраза о получении аргументов функций из текущего стека AS> вызовов, Я на редкость невнятен сегодня... Да, именно это. AS> то вот примерчик, вполне в соответствии с perldoc -f caller. AS> #!/usr/bin/perl -w AS> use strict; AS> use Data::Dumper; AS> sub one { AS> for (0..99) { # Does someone want to read more deep stack?! AS> my @frame; AS> { package DB; @frame = caller $_; } # Trick! Trick! AS> @frame or next; AS> local $Data::Dumper::Indent = 0; AS> local $Data::Dumper::Terse = 1; AS> print join(':', @frame[1..3]), ' => ', Dumper(\@DB::args), "\n"; AS> } AS> } AS> sub two { one(1, 2, 3); } AS> sub three { two('one', 2, 3); } AS> three('one','two','three'); Спасибо, дальше понятно. Единственно, в Carp в 5.005 делают не for (0..99), а while (do { {package DB; @frame = caller($i++); } } ) Или там таки возможны пустые фреймы? Hа практике не попадалось. -- Artem Chuprina Communiware.net RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/358.49, ICQ: 13038757 --- ifmail v.2.15dev5 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/14454569b85c6.html, оценка из 5, голосов 10
|