Как отлаживать код Perl XS в Windows - PullRequest
4 голосов
/ 06 сентября 2010

Можете ли вы описать шаги для отладки Perl XS dll в Windows.Отладчик пользовательского интерфейса, такой как Windbg, предпочтителен.Я хочу иметь возможность установить точку останова на подпрограммах в DLL и проверить стек и т. Д.

У меня отладочная сборка perl на моем боксе.

Ответы [ 2 ]

3 голосов
/ 06 сентября 2010

Вы можете попробовать сделать то, что я делал в * NIX один раз.

Проверьте .c, сгенерированный из вашего .xs, обратите внимание, что имя функции xsubpp дало вашу функцию. Откройте Perl в отладчике и установите точку останова на функцию с именем. Отладчик будет жаловаться, что символ еще не виден, и точка останова будет разрешена во время загрузки общих библиотек. Теперь попробуйте запустить Perl с вашим скриптом в качестве параметра. Если все это работает, тогда отладчик будет правильно разрешать имя символа, когда XS загружается Perl.

В некоторых отладчиках возникают проблемы с такими позже переназначенными символами. Обходной путь - добавить в сценарий после use your::custom::xs; вызов некоторого редкого системного или стандартного вызова библиотеки (я часто использую getpid()). Установите точку останова на редкую функцию. Запустите Perl и подождите, пока он не достигнет точки останова при редком вызове. Теперь ваш XS должен быть уже загружен и его символы видны отладчику. Установите точку останова на функции, которые вы хотите отлаживать.

В противном случае, имейте в виду, что вам не следует помещать слишком много логики в XS. XS предназначен только для склеивания и поэтому должен оставаться тонким. Если использование вашего XS требует дополнительной логики, поместите его лучше в .pm, который должен был уже автоматически генерироваться h2xs для вашего XS в подкаталоге lib/.

Надеюсь, это поможет.

3 голосов
/ 06 сентября 2010

Многое зависит от DLL, поэтому я могу дать только общий совет: установить разрыв на Perl_pp_entersub, затем шаг вперед. В DLL также должны быть символы отладки, если вы использовали обычный набор инструментов, об этом позаботились автоматически.

Чтобы проверить стек в том виде, в котором его видит Perl, переназначьте Макросы gdb Рейни для своего отладчика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...