🐞 Немного об отладке через var_dump
Кто-то из разработчиков отлаживает «Вконтакт» через var_dump прямо на «бою» |
Недавно поймал, посещая «Вконтакт», такую ситуацию. Владельцы её заметили нескоро — висело ещё минимум час.
«Вконтакте» написан на диалекте ПХП и для тех не знаком с этим языком поясню — это какой-то смелый программист, отлаживая что-то прямо на промышленной среде, вывел какой-то ассоциативный массив прямо в код страницы встроенной в язык функцией var_dump. Кстати, довольно распространённый способ в рядах «старой школы».
А как отлаживают сейчас?
Комментарий для Александр Банкин:
Например, xdebug.
Или так — https://github.com/barbushin/php-console
В продаешн xdebug не все тянут, видимо разработчик пытался исправить баг, который на дев машине не возпроизводился.
Неужели трудно вывод в файл вместо этого сделать? Ну да file_put_contents(’filename’, print_r($var, true)) — оно чуть больше набирать, но в продакшене дебажить в браузере???
Комментарий для http://fluder.co:
Мы обычно это делаем так: деплой идёт ещё на одну машину, помимо «боевых», ровно такую же, как и все остальные, она подключена к базе, кеши и всему остальному, но пользователи туда не ходят, там и отлаживаем.
Комментарий для Svan:
и получить многомегабайтный файл от всех пользователей вконтакта?
в <div style=«display:none»> надо заворачивать %)
Никогда не понимал монструозную кашу `var_dump` — есть же нормальный человечный `print_r`! Ну попробуйте вывести массив или выборку из базы через `var_dump` и `print_r` — ну в первом же случае получается какая-то каша, со всеми типами и прочей ерундой, которая не нужна; во втором же случае выводится нормальный аккуратный массивчик, где я всё вижу, что мне надо. ЧЯДНТ?
вседа так делаю.
меня (java программиста) часто вынуждает долг ковырять баги в опенсорс продукте testlink, который интегрирован с нашим ПО, я конечно догадываюсь о средствах дебага, но на прод ничего левого не просунешь, лень и так по быстрому хотя бы локализовать проблему часто достаточно.
но да, вероятно первая линия поддежки начнет массово получать тикеты с скриншотом велика (нашим продуктом пользуются ИТшники)
У нас просто обертка поверх которая проверяет вызов с какого адреса. Так что пользователи нет могут его увидеть
Комментарий для Артур Мудрик:
php > print_r([NULL]); var_dump([NULL]);
Array
(
[0] =>
)
array(1) {
[0]=>
NULL
}
Вам этого достаточно?
Комментарий для Артур Мудрик:
Даже вот так
http://pastebin.com/0HrGZGTd
Сам так иногда делаю на проде, правда прячу var_dump в комментарий <!-- .... -->
Комментарий для Евгения Степанищева:
У нас тоже так, но бывают исключительные ситуации, когда в dev ошибка не воспроизводится, в том числе из-за другого домена. Я не оправдывают ребят из VK, конечно срамота :)
Можно отдавать var_dump только для определенного IP
Или только при наличии определённого GET-параметра или куки.
Тащемта, file_put_contents по-умолчанию перезаписывает файл.
Комментарий для Svan:
Тащемта, и что это даст? Пока вы его открываете, он перезапишется 100500 раз и там будет результат от какого-нибудь Васи из Биробиджана.
Тащемта, программисту голова дана не только для моргания и дислокации рота.
Комментарий для Svan:
Ну и зачем тогда файл?
Комментарий для SiMM:
Видимо, человек живет по принципу «В любой непонятной ситуации исторгай дамп в файл»
В одной компании, где я работал и возникала редкая ситуация, когда на тестовой платформе баг не воспроизводился (там была другая база и кеш), и надо было срочно экспериментировать «на коленке», где делался дамп в случае передаче гет параметра/http заголовка/определенного юзера типа админа.
Вариант что я вижу тут — жесть конечно.
Думали, что быстро пофиксят, но получилось как всегда. Как в музыке, самые простые партии записываются дольше всего.