Отладка с помощью GDB¶
В этой главе мы познакомим вас с отладчиком GNU C, также известным как GDB. Когда происходит падение, обычно нужно найти виновный участок среди тысяч строк кода. Для этого нужны инструменты, и GDB — самый распространённый отладчик под Unix-платформами. Здесь мы дадим вам введение в GDB и покажем, как попрактиковаться с ним на исходном коде PHP.
Debug-символы¶
GDB требует debug-символов, чтобы сопоставлять адреса памяти в вашем бинарном файле с исходными позициями в коде. Чтобы
сгенерировать debug-символы, нужно передать флаг --enable-debug скрипту ./configure. Чтобы получить ещё больше
отладочной информации, можно добавить флаг CFLAGS="-ggdb3", который добавит поддержку макросов.
Отладка VM¶
VM живёт в большом файле zend_vm_execute.h, который генерируется zend_vm_gen.php из zend_vm_def.h.
Отладка этого файла может быть утомительной, так как он очень большой, и часто непонятно, какой именно
специализированный обработчик будет выполнен. К счастью, можно отлаживать zend_vm_def.h напрямую, сгенерировав VM
командой php Zend/zend_vm_gen.php --with-lines. Это аннотирует код директивой препроцессора #line, чтобы
отладчик мог определить происхождение сгенерированных инструкций.