我在命令行输入php -a
,以交互方式使用PHP。我修改了/etc/php5/cli/php.ini来加载我使用SWIG构建的扩展模块。
当我终止交互式会话时,我遇到了分段错误:
root@yourbox:~$ php -a
Interactive shell
php > ^DSegmentation fault
root@yourbox:~$
我想在详细模式下运行php,以便我可以看到导致seg错误的调用。有没有办法在交互模式下详细运行php?例如,使用Python,可以运行python -v
来获取详细的诊断信息。是否与PHP等效?
[[更新]]
使用valgrind时,这是一个堆栈跟踪:
root@yourbox:~$ USE_ZEND_ALLOC=0 valgrind php -a
==16414== Memcheck, a memory error detector
==16414== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==16414== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==16414== Command: php -a
==16414==
valgrind: Fatal error at startup: a function redirection
valgrind: which is mandatory for this platform-tool combination
valgrind: cannot be set up. Details of the redirection are:
valgrind:
valgrind: A must-be-redirected function
valgrind: whose name matches the pattern: strlen
valgrind: in an object with soname matching: ld-linux-x86-64.so.2
valgrind: was not found whilst processing
valgrind: symbols from the object with soname: ld-linux-x86-64.so.2
valgrind:
valgrind: Possible fixes: (1, short term): install glibc's debuginfo
valgrind: package on this machine. (2, longer term): ask the packagers
valgrind: for your Linux distribution to please in future ship a non-
valgrind: stripped ld.so (or whatever the dynamic linker .so is called)
valgrind: that exports the above-named function using the standard
valgrind: calling conventions for this platform. The package you need
valgrind: to install for fix (1) is called
valgrind:
valgrind: On Debian, Ubuntu: libc6-dbg
valgrind: On SuSE, openSuSE, Fedora, RHEL: glibc-debuginfo
valgrind:
valgrind: Cannot continue -- exiting now. Sorry.
答案 0 :(得分:1)
您可以使用常用的C调试工具获取堆栈跟踪。例如:
Valgrind的:
$ USE_ZEND_ALLOC=0 valgrind php -a
GDB:
$ gdb php
> r -a
如果没有获得有意义的堆栈跟踪,则可能需要使用调试符号重新编译PHP并减少优化。您可以将--enable-debug
传递到./configure
行。
答案 1 :(得分:0)
您可能希望使用valgrind
或类似内容来准确追踪您的PHP安装Seg Faulting的位置。
最有可能的是,错误与您加载的扩展程序有关,可能无法编译到正确的体系结构,包含泄漏或其他内容。