你不能这样调用内部函数,内部函数需要诸如框架、返回值之类的东西……不要这样做。
有一个.gdbinit https://github.com/php/php-src/blob/master/.gdbinit与 php 一起发布,其中有一个名为回溯跟踪 https://github.com/php/php-src/blob/master/.gdbinit#L557,你可以将其移植到 lldb。
您可以做的另一件事(可能更容易)就是调用生成跟踪的 API 函数,但要正确调用它。
这是 GDB (PHP7) 的:
define ztrace
set $var = malloc(sizeof(zval))
call zend_fetch_debug_backtrace($var, 0, 0, 0)
call php_var_dump($var, 0)
call _zval_ptr_dtor($var, 0, 0)
call free($var)
end
document ztrace
show a debug backtrace
end
对于 LLDB (PHP7):
(lldb) expr zval $var;
(lldb) expr zend_fetch_debug_backtrace(&$var, 0, 0, 0)
(lldb) expr php_var_dump(&$var, 0)
(lldb) expr _zval_ptr_dtor(&$var, 0, 0)
既然你问了,LLDB for PHP5.6(no-zts):
(lldb) expr zval *$zp = (zval*) malloc(sizeof(zval))
(lldb) expr zend_fetch_debug_backtrace($zp, 0, 0, 0)
(lldb) expr php_var_dump(&$zp, 0)
(lldb) expr _zval_ptr_dtor(&$zp, 0, 0)
(lldb) expr free($zp)