如何使用gdb在php脚本中设置断点

我试图通过GDB控制台调试PHP脚本,但我无法设置断点.这就是我所做的.
我已经用这个内容创建了一个脚本:

<?php
echo "1";
echo "1";
echo "1";
echo "1";
echo "1";
echo "1";
echo "1";

这是我调试它的临时性

# gdb php -d CANCELLAMI.php 
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...

warning: /root/CANCELLAMI.php is not a directory.
Reading symbols from /usr/bin/php...(no debugging symbols found)...done.

现在我在gdb中,我在第2行放了一个断点.

(gdb) break CANCELLAMI.php:2
No symbol table is loaded.  Use the "file" command.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (CANCELLAMI.php:2) pending.

但是,如果我运行CANCELLAMI脚本

(gdb) run CANCELLAMI.php 
Starting program: /usr/bin/php CANCELLAMI.php
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
11111111[Inferior 1 (process 30216) exited normally]

整个脚本被执行.

最佳答案
简答:如果要调试PHP脚本,请使用xdebug.

目前,gdb只能真正调试编译语言.它有很多关于可执行文件格式,调试信息格式,如何展开堆栈帧以及类似低级别的东西的知识.它没有的是一种将这些东西与解释器中的高级构造相关联的方法.

现在,如果您对解释器有足够的了解,可以通过这种方式调试脚本.您可以单步执行解释程序并了解它正在执行的操作.我以前做过这件事 – 这是可行的,但不是很愉快.如果你试图在某个特定脚本触发的解释器中找到一个错误,那真的很值得.

偶尔会出现gdb可以调试脚本的想法.这是一个好主意,但这是一项相当大的工作量.据我所知,目前没有人正在研究它.

转载注明原文:如何使用gdb在php脚本中设置断点 - 代码日志