我正在使用Netbeans 6.7和XDebug来debugging我的机器上的PHP站点,从Netbeans(Project-> Debug)启动请求。 这工作正常,是非常有用的。
我的问题是:是否有可能将debugging器附加到任何请求,而只是从Netbeans内部启动?
即不是单击“debugging”,而是将Netbeans置于debugging器启动的模式,并附加到下一个请求。
我有一种感觉,这可能是一个愚蠢的问题,但如果可能的话,这将是伟大的。
编辑:多一点信息
我的系统(Ubuntu 9.04)设置如下:
/etc/php5/conf.d/xdebug.ini
内容
zend_extension=/usr/lib/php5/20060613/xdebug.so xdebug.remote_enable=on xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host=localhost xdebug.remote_port=9000 xdebug.idekey=netbeans-xdebug
Netbeans PHPdebugging选项是默认的:
Debugger Port: 9000 Session ID: netbeans-xdebug Stop at the First Line: ticked
我的/etc/hosts
文件将www.mywebsite.com
redirect到localhost
如果我点击Netbeans中的debuggingbutton,那么Firefox将以地址http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug
启动,debugging器按预期工作。
但是,如果我只是浏览到http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug
,这不会启动NetBeans的debugging器。
我也尝试设置xdebug.remote_host=www.mywebsite.com
,但这没有什么区别。
另外,我已经启用了xdebug.remote_log
,并且显示了从netbeans内部启动时的信息,但是没有任何外部请求。 所以我不认为XDebug根本看不到外部请求。
去项目属性 > 运行配置 > 高级 > 调试网址,并检查不要打开网页浏览器 (*)。 不要在调试器代理下设置主机。 保存这些设置。 在项目窗口中的项目上: 右键单击 > 调试 (这将开始侦听调试连接)。 没有浏览器启动。 在浏览器中输入http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug
。 它应该打破netbeans。 至少这是这里发生的事:)
(*)你可能还必须设置一个路径映射 – 对我来说,它没有工作
默认情况下,当未指定“XDEBUG_SESSION_START”Cookie / URL参数时,xdebug不会尝试连接到远程主机。 您可以通过在php.ini中将xdebug.remote_autostart设置为1来启用xdebug以“始终开启”。
此外,您将不得不在NetBeans中启动PHP调试器才能正常工作。 我还没有找到更好的解决方案,但是您可以通过开始调试随机文件(使用CTRL + SHIFT + F5开始调试文件),然后继续(通过按F5键)一次来监听传入连接它停在断点处。 Netbeans调试器应该运行,直到你真的停止它。
更新:由于NetBeans检查会话标识(XDEBUG_SESSION_START),您也必须设置idekey变量。 例如:
xdebug.remote_autostart = 1 xdebug.idekey = "netbeans-xdebug"
在升级PHP和编译/安装xdebug之后,我遇到了类似的问题(在NetBeans,Mac OSX上)。 phpinfo显示xdebug被加载,但它仍然不会连接,尝试上面列出的所有东西仍然没有成功。 然后,我尝试将 PHP.ini文件中设置的参数数量减少到所需的最小值。 这似乎是为了解决这个问题。
; REMOVED (commented) the following ; xdebug.remote_log=/myfile.log ;xdebug.extended_info = off ;xdebug.auto_trace=1 ;xdebug.trace_output_dir=/mydir/myphptracefile.txt ;xdebug.trace_output_name=php_trace.%c ;xdebug.collect_params=4
我也将netbeans-xdebug中的默认xdebug.idekey重命名为默认值,然后再返回。
重新启动Apache之后,xdebug又开始工作了:我不确定究竟是什么修正了它,但是一个好的起点可能是从php.ini文件中的最小数量的xdebug设置开始,然后如果需要,他们。 我怀疑它可能与跟踪设置有关,但不能确定。
我最终使用的基本设置是:
xdebug.remote_enable=on xdebug.remote_port=9000 xdebug.remote_host=localhost xdebug.remote_handler=dbgp xdebug.idekey=netbeans-xdebug
编译debugclient(在xdebug源码包中)也是一个好主意,并且在命令行中检查调试,因为这会告诉你xdebug是否至少可以独立于IDE运行。
不知道Netbeans,但我用过的任何其他IDE总是在侦听调试连接。 您可以通过将查询字符串?XDEBUG_SESSION_START=name
到url来从xdebug启动一个新的调试会话。 如果Netbeans正在监听,那么应该启动一个新的调试会话。
有关更多详细信息,请参阅http://xdebug.org/docs/remote#browser_session