有时候,对APP的bug的定位的时候,光查看服务器的log是定位不出来具体问题在哪儿的。需要进行Debug进行分析.
有一种方式是 直接进行 remote debug, 这个配置服务器的配置,然后本地启动就ok了。这个有个缺点是,当你打了 断点的时候,别人访问的时候,就会卡在那里。直到你讲该 断点 释放掉
另一种方式是 将请求引入到本地工程上来,进行debug. 本文就将探讨这种方式
主要的思路是:
- Fiddler - 手机代理到 local machine
- nginx - 对 域名请求 根据端口的不同 进行分发
- 本地机器捕捉请求,然后进行debug分析
操作步骤如下:
1. 安装+配置 nginx
安装的话,参考官网就可以了
在Windows下配置,需要注意点:
-
- nginx.conf 配置:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include conf.d/*.conf;
}
- conf.d/test.conf的配置:
upstream gwhyz{
server 192.168.158.80:8080;
}
server {
listen 80;
server_name hello.test.com;
location ~/gwhyz/ {
proxy_pass http://gwhyz;
}
}
- 文件路径如下:
2. 设置 windows下的 80端口
默认的,win7的80端口会被系统进程所占用. 而nginx进行转发的时候,又默认是对80端口进行监听. 所以要把默认的那个系统进程给停掉
修改的步骤如下:
- 2.1. 在cmd中输入 regedit,回车
- 2.2. 在目录中找到: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP
- 2.3. 修改 Start的值为1,然后重启
具体可参考:http://blog.youkuaiyun.com/small____fish/article/details/8222865
3. 设置 hosts文件
3.1. 在目录C:\Windows\System32\drivers\etc\ 下找到 hosts文件,然后添加一行
假设本机地址为:192.168.158.80
192.168.158.80 hello.test.com
- 3.2. 然后在 cmd 窗口中输入以下命令让hosts生效
ipconfig /flushdns
4. 设置 手机WIFI 代理
5. 配置 fiddler
这里主要需要注意的是代理的设置。因为在进行试验的时候,我自己的机器默认是有翻墙的代理的,然后没有进行这一步的设置,老是访问不到本地的 nginx
在 Tools -> WinINET Options 打开代理,进行设置:
6. 启动本地项目,然后在APP端进行访问,就可以进行debug了
- 最后面可以看到,如果在APP端发出 http://hello.test.com/gwhyz/… 的请求,就能在本地机器上捕捉到,并进行debug分析