Иногда нет возможности запустить дебаггер и понять, где именно происходит вызов того или иного метода.
Например, в одном проекте есть метод на php, который должен выдавать пользователю “ошибку 404”:
//class some_class {
funciton notFound($reason=”no reason”) {
//…
echo $reason;
//…
}
//…
echo $reason;
//…
}
И есть пара сотен мест, где метод вызван без параметра (и выдает ‘no reason’). Как быть, если надо найти, где вызывается этот метод?
Хинт: можно заменить все вызовы метода без параметров - notFound() на вызовы notFound со случайным числом в качестве параметра (например: notFound(321653)) потом посмотреть на это число в браузере и спокойно найти его, например, с помощью команды grep.
Замену вызовов метода notFound() на notFound(random int) нам поможет сделать такой скрипт на перле:
#!/usr/bin/perl # my $file = $ARGV[0]; open FILE, $file or die "failed to open $file\n"; my $text = join("", <FILE>); close FILE; $text =~ s/notFound\(\)/'notFound(' . int(rand() * 1000000) . ')'/ge; open (FILE, ">$file") or die "failed to write to $file\n"; print FILE $text; close(FILE);запуск:
chmod +x ./script.pl
find /path/to/project -type f -name *.php -exec ./script.pl {} \;
find /path/to/project -type f -name *.php -exec ./script.pl {} \;
затем - поиск grep’ом:
grep -R “ваше заветное число” /path/to/project/*
так вы найдете строку, которая, возможно, портит вам жизнь
grep -R “ваше заветное число” /path/to/project/*
так вы найдете строку, которая, возможно, портит вам жизнь
ps: Если вам приходится аналогичными способами работать с кодом, это свидетельствует о весьма тяжелом состоянии вашего проекта (тэг “код с душком”). Подумайте о рефакторинге, но если проект рефакторингу не подлежит, то иногда перл и средства командной строки вам помогут))
Комментариев нет:
Отправить комментарий