Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Embedded debugging   Alexander A. Kaluzhny   06 Sep 2002 16:38:17 
 Re: Embedded debugging   Andrey Sapozhnikov   10 Sep 2002 02:02:30 
 Re: Embedded debugging   Alexander A. Kaluzhny   11 Sep 2002 19:29:29 
Архивное /ru.perl/52846e8a7b71.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional