Отладка PHP расширений под *nix

pachanga

Новичок
Отладка PHP расширений под *nix

Товарищи разработчики, имеющие большой практический опыт разработки под *nix, не расскажите о своих best practices отладки PHP расширений? Конечно же, phpt тесты - "наше все", однако бывают такие ситуации, что без дебаггера совсем никак. ;)

Я так понимаю, что в основном для отладки используются gdb --tui, cgdb, ddd(что-то еще?). Есть какие-либо практические советы по применению этих инструментов?
 
Я не знаю будет ли это в тему расширений php, но у меня есть замечательная книга "Программирование для Linux -- профессиональный подход". Там хотя и не в очень замысловатой форме, но все же изложены основные тонкости в том числе и отладки под Linux. Думаю в торентах её можно найти :).
 

tony2001

TeaM PHPClub
>в основном для отладки используются gdb --tui, cgdb, ddd
никогда не использовал ни tui, ни другие интерфейсы.
в консоли всё максимально просто и понятно, надо просто запомнить штук пять команд, верней их сокращения.
b, d, n, s, p - вот это основные, ну и еще ena & dis, пожалуй..
http://www.yolinux.com/TUTORIALS/GDB-Commands.html - полный список.
это собственно всё, что нужно чтобы посмотреть как именно выполняется код, значения переменных в опр. точку времени и т.п.

для отладки памяти ничем не заменим valgrind.
не забывай отключать Zend MM перед тем как запускать PHP через valgrind, см. Zend/README.ZEND_MM

и phpt - наше всё, да.
чем больше покрытие тестами, чем они изощрённее, тем больше гарантия, что скрытых багов там не осталось.
хотя предусмотреть всё невозможно, конечно.
 

pachanga

Новичок
и phpt - наше всё, да.
чем больше покрытие тестами, чем они изощрённее, тем больше гарантия, что скрытых багов там не осталось.
хотя предусмотреть всё невозможно, конечно.
Такой момент, насколько я понимаю, примерно как выглядит отладка:

1) Смотрим, что phpt тест сваливается
2) Выполняем phpt тест из-под gdb (gdb --args php runtests.php Foo.phpt) и смотрим, что именно валится
3) Фиксим
4) В надежде еще раз гоняем phpt

?
 

tony2001

TeaM PHPClub
>3) Фиксим
>4) В надежде еще раз гоняем phpt
почему "в надежде" ? =)
фиксим, проверяем и прогоняем через valgrind чтобы окончательно удостовериться, что всё ок.
 

pachanga

Новичок
Автор оригинала: tony2001
>в основном для отладки используются gdb --tui, cgdb, ddd
никогда не использовал ни tui, ни другие интерфейсы.
в консоли всё максимально просто и понятно, надо просто запомнить штук пять команд, верней их сокращения.
b, d, n, s, p - вот это основные, ну и еще ena & dis, пожалуй..
Я смотрю, ты хардкорный товарищ, даже list не используешь? ;)
 

tony2001

TeaM PHPClub
а, ну да, еще 'l'.
с другой стороны, редко когда в соседней консоли не открыт исходник..
 

pachanga

Новичок
Такой еще вопрос, на время дебага стоит компилить без оптимизации вообще?
 

tony2001

TeaM PHPClub
конечно, а иначе ты потеряешь все debug data.
но --enable-debug это за тебя делает (убирает все -O.. из CFLAGS)
 

tony2001

TeaM PHPClub
не за что.
ты спрашивай, если возникают вопросы, мне самому интересно посмотреть на это с другой стороны.
возможно, как-нибудь я соберусь написать некий tutorial на эту тему..
 

boombick

boombick.org
возможно, как-нибудь я соберусь написать некий tutorial на эту тему..
Типа "Напиши экстеншен к PHP за 24 часа"? :)
А если по делу, то очень бы хотелось подобный труд увидеть.. Мне было бы крайне интересно почитать
 

Alexandre

PHPПенсионер
сам использую dbg,
мне до советов от tony2001 еще далеко... в принципе он все сказал.
исползую несколько команд все делаю в консоле.
утечки памяти вычислял используя valgrind

я запускаю php в dbg, а из под дебага run test.phpt

Типа "Напиши экстеншен к PHP за 24 часа"?
boombick за 24 можно написать только каркас к экстеншену ... хотя зависит все от логики экстеншена, его системных вызовов и тд...
 

svetasmirnova

маленький монстрик
Alexandre
>за 24 можно написать только каркас к экстеншену ...
Даже к "Hello, world"?

Не пугай людей ;)
 

Alexandre

PHPПенсионер
tony2001 согласен, при наличии опыта - да...
а при его отсутствии - много времени тратится на изучение разных примочек...

на первый экстеншен у меня ушло минут 40...
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
да уж, подобный tutorial был бы очень кстати :)
 

pachanga

Новичок
Автор оригинала: tony2001
не за что.
ты спрашивай, если возникают вопросы, мне самому интересно посмотреть на это с другой стороны.
возможно, как-нибудь я соберусь написать некий tutorial на эту тему..
Спасибо заранее, однако вот мне лично было бы интереснее почитать о настройке dev. среды под Linux для подобных вещей и постановке всего цикла разработки: vim, :mak, fix, :mak - только в деталях ;) Что-то типа "один день из жизни *nix разработчика"...
 
Сверху