Отладка с помощью 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, чтобы отладчик мог определить происхождение сгенерированных инструкций.