|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 10 Sep 2002 02:02:30 To : Alexander A. Kaluzhny Subject : Re: Embedded debugging --------------------------------------------------------------------------------
Alexander A. Kaluzhny wrote:
> Привет Всем.
>
> Вот у меня вопрос по встроенному перлу. Хочу работать с дебаггером во
> встроенном перле.
>
> В обычном случае он запускается следующим образом:
>
> char *embed_no_debug[] = {"TEST","-e","0"};
> perl_construct(perl_interp);
> status = perl_parse(perl_interp, xs_init, 3, embed_no_debug, (char **)NULL);
> status = perl_run(perl_interp);
>
> perl_eval_pv(...);
> call_argv(..., G_DISCARD | G_EVAL, argv);
> perl_destruct(perl_interp);
> perl_free(perl_interp);
>
> То есть опции "-e 0" заставляют перл игнорировать коммандную строку
> (выполняя при этом комманду "0"). Если я указываю "-d", перл включает
> отладку выражения, переданного по "-e".
>
> Если "-е" не передать, то он воспринимает "ТЕСТ" как имя скрипта, и кончно,
> его не находит.
>
> Подытожив все вышесказанное, хочу узнать, как включить отладку (например
> программно из perl_eval_pv(...) или с помощью внутренней переменной
> интерпретатора или через коммандную строку), но так чтобы отлаживался мой
> код вызванный например по perl_eval_pv(...) или call_argv?
1. Включите -g в состав embed_no_debug
2. Hе вызывайте perl_run. Зачем вам выполнять байт 0?
3. Установите перловую переменную $DB::single в 1 до своих
вызовов eval_pv или call_argv.
4. Запускайте, шагайте и отлаживайтесь на здоровье.
Пример:
char *embed_no_debug[] = {"TEST","-d", "-e","0"};
perl_construct(perl_interp);
perl_parse(perl_interp, xs_init, 4, embed_no_debug, (char **)NULL);
eval_pv("$DB::single=1;", TRUE);
eval_pv("$a = 3; $a **= 2", TRUE);
eval_pv("$a = 4; $a **= 2", TRUE);
eval_pv("$a = 5; $a **= 2", TRUE);
eval_pv("sub testx { print 2 }", TRUE);
eval_pv("sub testy { print 3 }", TRUE);
call_argv("testx", G_DISCARD | G_EVAL, argvx);
perl_destruct(perl_interp);
perl_free(perl_interp);
Андрей
P.S. Вызов perl_eval_pv(...) устарел. perldoc perlapi рекомендует
eval_pv.
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/52846e8a7b71.html, оценка из 5, голосов 10
|