聘我网

新概念招聘3.0

如何用gdb/windbg调试PHP自定义函数?

vote up0vote downstar

如果调试内置函数,比如preg_replace,直接在对应函数上下断即可,也就是php_pcre_replace_impl

但如何对用户定义的函数下断?

 

2 个答复

vote up0vote downcheck

2种方法。

  1. 在目标函数中添加一行posix_kill( posix_getpid(), SIGTRAP);,其中SIGTRAP的具体数值参考kill -l,然后debugger便会捕获该signal。 例子:

vi test.php:
<?php
test();
echo 1;
function test() {
    posix_kill( posix_getpid(), 5);
}


gdb php
r test.php

2.直接对execute下断,因为所有的用户自定义函数都会通过该方法执行。

链接
vote up0vote down

一些命令:

加载符号

.symfix

查看符号路径

.sympath

重新加载符号

.reload

查看调用堆栈

k

查看类型

dt  _kthread

查看模块信息

!lmi instlsp

查看符号信息

x <module>!<symbols> 

dump分析

!analyze -v

设置断点

bu main

显示断点

bl

删除断点

bc 1
链接

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.