Forum Webscript.Ru
Программирование => Perl => Тема начата: KillerWM от 06 Февраля 2008, 10:44:40
-
имеется скрипт который неполностью выполняет свою работу в каком месте и из-за чего вылетает неизвестно, как сделать чтобы ошибки скрипта выводились в лог файл?
-
можно сделать несколькими способами:
1) просто открываешь в начала скрипта файл и и везде где хочешь можешь писать в него содержимое переменных и тд.
2) можно смотреть содержимое переменных в процессе выполнения скрипта используя встроенную функцию warn, она не останавливает выполнение скрипта в отличие от die!
-
demond:
можно сделать несколькими способами: 1) просто открываешь в начала скрипта файл и и везде где хочешь можешь писать в него содержимое переменных и тд. 2) можно смотреть содержимое переменных в процессе выполнения скрипта используя встроенную функцию warn, она не останавливает выполнение скрипта в отличие от die!
2 пункт не подходит везде warn или die не поставишь да и мне вывод не в браузер нужен а в файл потому что скрипт долго выполняется
1 пункт делал но проблема в том что запись в файл делается через буфер и при вылете скрипта по какойто ошибке, в файл лога буфер не записывается и лог остается пустой, а вот если скрипт нормально выходит и файл лога штатно закрывается то в него запись происходит
-
KillerWM:
1 пункт делал но проблема в том что запись в файл делается через буфер и при вылете скрипта по какойто ошибке, в файл лога буфер не записывается и лог остается пустой, а вот если скрипт нормально выходит и файл лога штатно закрывается то в него запись происходит
а что, писать в файл через буфер это такая задумка? просто создать отдельный файл для debug\'a и писать в него не сразу не получится?
Кроме того есть такой метод выявления ошибок: либо разбивать скрипт на части и тестить каждую часть в отдельности, либо встать какой-нибудь print и перемещать его по скрипту сверху вниз.
-
Поставить IIS и PerlIS - он все ошибки пишет в лог файл :-)
-
demond:
а что, писать в файл через буфер это такая задумка? просто создать отдельный файл для debug\'a и писать в него не сразу не получится? Кроме того есть такой метод выявления ошибок: либо разбивать скрипт на части и тестить каждую часть в отдельности, либо встать какой-нибудь print и перемещать его по скрипту сверху вниз.
по умолчанию запись в файл командой print происходит через буфер как зделать чтобы без буфера писалось я незнаю.
для вывода ошибок я вставил эту строчку:
BEGIN{use CGI::Carp qw(carpout);open(LOG, ">>$0.err");carpout(LOG);close(LOG);}
но при вылете скрипта лог файл пуст вероятно из-за использования буфера, как это исправить?
-
open (ADD, ">>log.log");
print ADD "$_";
close (ADD);
-
Yaroslav:
print ADD "$_";
и че эта хрень делает?
-
записывает в файл все что ты укажешь
-
Yaroslav:
записывает в файл все что ты укажешь
мне надо чтобы ошибки в файл записывались, а не только все что мне надо, и при записи каждой строчки открывать и закрывать файл не шибко ли муторно
-
мне почемуто еще изначально показалось что задача поставлена неправильно. нужно не лог писать. а тесты. поэтому и не стал учавствовать в дискуссии.
-
open STDERR,"> file" ?
-
arto:
open STDERR,"> file" ?
туда ошибки будут записываться через буфер или нет?
а то если через буфер то не пойдет так как буфер в файл запишется тока если файл закроют командой close, а если скрипт слетит в результате ошибки то программа до команды закрытия файла не дойдет и файл будет пустым.
-
STDERR небуферизован, by default.
-
arto:
STDERR небуферизован, by default.
а open ведь через буфер с файлами работает.
завтра попробую, если попробую так:
open STDERR,"> file"
print STDERR "тест"
строка "тест" через буфер пойдет или нет ?
-
а что мешает изначально определить глде могут быть ошибки и поставить в этих местах запись в лог файл?
-
может эти ошибки в этих местах просто исправить, вместо записи их в лог?
-
Yaroslav:
а что мешает изначально определить глде могут быть ошибки и поставить в этих местах запись в лог файл?
код большой вылетает по ошибке не всегда в основном при длительной работе скрипта, так что надо запись ошибок в лог сделать чтоб потом можно было посмотреть что за ошибка произошла.
arto:
может эти ошибки в этих местах просто исправить, вместо записи их в лог?
еслиб знал какие ошибки и где происходят так бы и сделал
-
KillerWM
А модули какие-нибудь используешь? Почти во всех модулях при вызове метода new есть параметр DEBUG. Присваиваешь ему 1 и смотришь поэтапное выполнение... :)
-
demond:
А модули какие-нибудь используешь? Почти во всех модулях при вызове метода new есть параметр DEBUG. Присваиваешь ему 1 и смотришь поэтапное выполнение...
только то что уде хостер поставил например
use Net::FTP;
use LWP::UserAgent;
use HTTP::Headers;
-
нашел парамет DEBUG только у Net::FTP. Но я думаю этого может хватить. кроме того можно самому добавить в модули вывод добаговых сообщений!
-
demond:
нашел парамет DEBUG только у Net::FTP. Но я думаю этого может хватить. кроме того можно самому добавить в модули вывод добаговых сообщений!
как включить параметр DEBUG у Net::FTP ?
у меня доступа к модулям нет режима DEBUG только у Net::FTP мне нехватит еще надо на HTTP::Request