gpt4 book ai didi

php - 如何使用 dbg 在用户定义的 PHP 函数上设置断点?

转载 作者:行者123 更新时间:2023-11-30 18:05:51 25 4
gpt4 key购买 nike

我可以通过 php_pcre_replace 上的中断来中断 preg_replace 等内置函数,

但是我自己的函数(function func(){...}),如何在其上设置断点?

最佳答案

如果您的函数是在 PHP 解释器本身中定义的,并且基本上是在运行时解释和评估的,而不是预先编译的基于 C 的插件,那么您将无法从gdb 除非您要单步执行实际的 PHP 解释器执行循环本身,即使如此,我也不确定您如何准确知道您的函数何时被调用。一些可行的可能性是监视对 PHP execute() 的所有调用。 ,或者可能发出 SIGTRAP使用posix_killposix_getpid PHP 在函数内部处理自身,以便在函数执行时停止 gdb。另一方面,内置函数实际上是用 C 实现的,因此当解释器调用这些函数时,它正在调用编译后的代码,因此可以轻松地在 gdb 中设置断点。

例如,在 PHP 函数中添加这一行(可能就在开头)

posix_kill(posix_getpid(), SIGTRAP);

应该在调用点停止您使用 gdb 监视的 PHP 进程,该进程位于解释器中用户定义的 PHP 函数内。根据您的操作系统,可能未定义 SIGTRAP 的值,因此您可能必须查看操作系统的 signal.h 文件以了解合适的信号值。但 SIGTRAP 可在任何兼容 POSIX 的操作系统上使用。

最后,当您不使用 gdb 时,请务必删除此行,否则您将在发出信号时终止运行脚本的 PHP 进程。

关于php - 如何使用 dbg 在用户定义的 PHP 函数上设置断点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6006796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com