发布新日志

  • PhpStorm+xdebug远程调试Linux机器上的代码

    2015-06-23 13:21:23

    一、背景介绍

    最近在了解网址导航项目,为了能够更加深入地了解被测对象,所以我选择了查看网址导航代码的方式进行,但是只是生硬地查看php源代码是比较生涩的,我希望能够通过IDE工具进行代码单步调试来了解整个网址导航的功能实现。

    为了达成以上目的,我选择了phpstorm+xdebug来远程调试Linux上的代码。与之前白松分享的phpstorm+xdebug调试方法不同的是,前者调试的Webserver是在本地环境搭建了php+apache调试的,而我要面对的问题有:

    1.网址导航的代码是部署在Linux虚机环境上的。

    2.代码运行环境是:Linux+nginx+php-fpm+redis+superphp的环境支持

    为了解决以上方法,采用了以下的方法。

    二、配置方法

    1.在Linux虚机上编译配置xdebug

    1)下载xdebug。访问http://xdebug.org/download.php,下载对应的xdebug源代码。

    2)# tar -xvf xdebug-2.3.2.tgz

    3)#cd xdebug

    4)运行php目录/bin/phpize

    5)配置./configure--enable-xdebug --with-php-config=/phpbin路径/php-config

    6)make

    7)make install

    2.在Linux虚机上配置xdebug

    在php.ini文件中增加如下配置:

    zend_extension="/search/php5/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so" //xdebug.so的路径,请根据安装的php目录来配置

    [xdebug]

    xdebug.idekey=PHPSTORM

    xdebug.remote_connect_back = 1 //如果开启此,将忽略下面的 xdebug.remote_host 的参数

    xdebug.remote_host=10.129.157.29 //注意这里是,客户端的ip<即IDE的机器的ip,不是你的web server>

    xdebug.remote_enable=on

    xdebug.remote_port = 9001 //注意这里是,客户端的端口<IDE的机器的ip,不是你的web server>

    xdebug.remote_handler = dbgp

    xdebug.auto_trace = 1

    xdebug.collect_includes = 1

    xdebug.collect_params = 1

    xdebug.collect_return = 1

    xdebug.default_enable = 1

    xdebug.collect_assignments = 1

    xdebug.collect_vars = 1

    xdebug.remote_autostart = 1

    xdebug.show_local_vars = 1

    xdebug.show_exception_trace = 0

    3.下载phpstorm

    4.在phpstorm中配置

    1)配置Debug项:打开file->setings->php|Debug。在右侧的xdebug配置项中,配置与服务器xdebug一样的端口号,如上例的9001。

    2)配置server项

    a.打开file->setings->php|Servers 在右侧点击+,添加server,host: web服务器的域名或ip ,端口一般为80。

    b.勾选下面的 use pathmapping,在absolute path to the server填写服务器上代码所在的路径。这里一定要设置哦! 不然,会发生找不到文件而出错,导至调试终止 。

    note:由于网址导航中还要引用superphp,所以在project中需要增加superphp,并且设置在服务器上superphp的路径。

    3)配置WEB Application调试点:打开Run->EditConfigurations-> 增加一个 PHP WEBAPPlication 的调试点 。

    至此,配置完毕!

    5.在代码中设置断点后,点击Run->Debug,浏览器被调起,同时phpstorm中的断点被中断,之后就可以F5单步调试了。

     

  • PhpStorm+xdebug远程调试Linux机器上的代码

    2015-06-19 19:04:54

    一、背景介绍

    最近在了解网址导航项目,为了能够更加深入地了解被测对象,所以我选择了查看网址导航代码的方式进行,但是只是生硬地查看php源代码是比较生涩的,我希望能够通过IDE工具进行代码单步调试来了解整个网址导航的功能实现。

    为了达成以上目的,我选择了phpstorm+xdebug来远程调试Linux上的代码。与之前白松分享的phpstorm+xdebug调试方法不同的是,前者调试的Webserver是在本地环境搭建了php+apache调试的,而我要面对的问题有:

    1.网址导航的代码是部署在Linux虚机环境上的。

    2.代码运行环境是:Linux+nginx+php-fpm+redis+superphp的环境支持

    为了解决以上方法,采用了以下的方法。

    二、配置方法

    1.Linux虚机上编译配置xdebug

    1)下载xdebug。访问http://xdebug.org/download.php,下载对应的xdebug源代码。

    2)# tar -xvf xdebug-2.3.2.tgz

    3)#cd xdebug

    4)运行php目录/bin/phpize

    5)配置./configure --enable-xdebug --with-php-config=/phpbin路径/php-config

    6)make

    7)make install

    2.Linux虚机上配置xdebug

    php.ini文件中增加如下配置:

    zend_extension="/search/php5/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so" //xdebug.so的路径,请根据安装的php目录来配置

    [xdebug]

    xdebug.idekey=PHPSTORM

    xdebug.remote_connect_back = 1 //如果开启此,将忽略下面的 xdebug.remote_host 的参数

    xdebug.remote_host=10.129.157.29 //注意这里是,客户端的ip<IDE的机器的ip,不是你的web server>

    xdebug.remote_enable=on

    xdebug.remote_port = 9001 //注意这里是,客户端的端口<IDE的机器的ip,不是你的web server>

    xdebug.remote_handler = dbgp

    xdebug.auto_trace = 1

    xdebug.collect_includes = 1

    xdebug.collect_params = 1

    xdebug.collect_return = 1

    xdebug.default_enable = 1

    xdebug.collect_assignments = 1

    xdebug.collect_vars = 1

    xdebug.remote_autostart = 1

    xdebug.show_local_vars = 1

    xdebug.show_exception_trace = 0

    3.下载phpstorm

    4.phpstorm中配置

    1)配置Debug项:打开file->setings->php|Debug。在右侧的xdebug配置项中,配置与服务器xdebug一样的端口号,如上例的9001

    2)配置server

    a.打开file->setings->php|Servers 在右侧点击+,添加serverhost: web服务器的域名或ip ,端口一般为80

    b.勾选下面的 use path mapping,在absolute path to the server填写服务器上代码所在的路径。这里一定要设置哦! 不然,会发生找不到文件而出错,导至调试终止 

    note:由于网址导航中还要引用superphp,所以在project中需要增加superphp,并且设置在服务器上superphp的路径。

    3)配置WEB Application调试点:打开Run->Edit Configurations-> 增加一个 PHP WEB APPlication 的调试点 

    至此,配置完毕!

    5.在代码中设置断点后,点击Run->Debug,浏览器被调起,同时phpstorm中的断点被中断,之后就可以F5单步调试了。

     

  • 【调试技巧】Windbg常用调试方法

    2015-04-27 20:47:06

    简介:

    当出现进程CPU占用率高、进程假死(不退出)、进程发生崩溃时,可以参考以下的windbg命令使用说明,进一步提供有价值的信息给开发。

    1.进程CPU占用率高问题跟进方法

    1)开启windbg,attach到对应的进程上 
    2)加载目标程序PDB和系统PDB:

    srv*DownstreamStore*http://msdl.microsoft.com/download/symbols

    3)查看所有线程的运行时间

    命令: !runaway
    • 1

    这里写图片描述 
    4)切换至CPU占用较高的工作线程,如上图的6号线程

    命令: ~6s 
    • 1

    5)查看函数调用栈

    命令: kb
    • 1

    这里写图片描述

    2.进程不退出并且不占用CPU时跟进方法

    1)开启windbg,attach到对应的进程上 
    2)加载目标程序PDB和系统PDB:

    srv*DownstreamStore*http://msdl.microsoft.com/download/symbols

    3)切换至0号主线程

    命令:  ~0s
    • 1

    4)查看主线程的函数调用栈

    命令: kb
    • 1

    正常的调用栈一般是: 
    这里写图片描述 
    5)如果该线程拥有锁,使用!cs查看锁的拥有者

    命令: !cs [内存地址]
    • 1

    以上命令会显示哪个线程拥有锁owner thread id = 0xXXXX 
    6)切换至拥有锁的线程

    命令: ~Xs   X代表线程序号
    • 1

    7)查看函数调用栈

    命令: kb
    • 1

    3.进程发生崩溃跟进方法

    1)开启windbg,打开对应的dump文件 
    2)加载目标程序PDB和系统PDB:

    srv*DownstreamStore*http://msdl.microsoft.com/download/symbols

    3)查看异常分析

    命令: !analyze -v
    • 1

    4)切换至崩溃现场

    命令: .ecxr
    • 1

    5)查看崩溃调用栈

    命令: kb
    • 1
    1. 当不确定exe或者dll版本时,可以使用lm命令查看详细信息: 
      查看dll的版本号

      Lm vm xxx xxx代表dll或者exe的名称

    2. 当不确定线程崩溃或假死时,可以使用~*kb查看所有线程的函数调用栈,然后逐个分析可能崩溃或假死的线程。 
      查看全部线程信息

      ~*kb

诸葛东明

诸葛东明

搜狗公司搜狗浏览器测试经理。2008年加入搜狗公司,负责搜狗浏览器的相关测试工作,见证了搜狗浏览器从无到有的过程。

数据统计

  • 访问量: 31458
  • 日志数: 19
  • 建立时间: 2008-06-03
  • 更新时间: 2015-06-23

RSS订阅

Open Toolbar