Я играю с LLDB (отладчик), и я сделал следующий эксперимент.
-
Запустите PHP script как:
php -r "sleep(1000);"
или
php -r "function r(){sleep(1000);}r();"
-
На другой консоли я вызывал непосредственно
zif_debug_backtrace()
изlldb
:echo 'call (void)zif_debug_backtrace()' | lldb -p $(pgrep -fn php)
Выше работал, однако процесс остановился со следующим предупреждением:
Warning: sleep() expects at most 2 parameters, 1606408648 given in Command line code on line 1
Call Stack:
0.0016 235152 1. {main}() Command line code:0
0.0021 235248 2. sleep(1000) Command line code:1
Я не совсем уверен, почему script должен был остановиться и что мне нужно сделать для достижения прозрачности (без влияния на script)?
P.S. То же самое происходит при вызове zif_debug_print_backtrace()
, а при вызове custom_backtrace()
отображается: Backtrace null function called
. Я использую xdebug
, если это что-то изменит.
Возможно, мне нужно вызвать другую функцию, например zend_fetch_debug_backtrace
(см. image dump symtab
)? Или используйте правильные аргументы, если да, то какой?
Меня интересуют только решения lldb
/gdb
, чтобы распечатать обратную трассировку.
Аналогичный подход работает в Ruby, например:
- Выполнить:
ruby -e 'sleep 1000'
. - В другом терминале:
echo 'call (void)rb_backtrace()' | lldb -p $(pgrep -nf ruby)
.