测试环境调试

27 阅读3分钟

idea远程调试

今天和其他中心联调我写的一个接口,遇到了一些问题。我上周三就写好了接口,一部分逻辑本地测没通,数据库捞不到一些有用的数据,只能等其他中心的开发完再联调。过两天这个接口就要上生产环境了,测试说这个接口涉及场景有点多,被催着赶紧联调,然后整个下午就都在排错了。一开始没通,经过排查是其他中心生成数据时,漏了一个关键字段,于是没有跑通,这个从报错就定位到问题了,但是定位具体漏掉的原因也花了我不少时间,最后是其他的业务逻辑问题,和我接口也没多大关系,于是手动补上关键字段继续测,但是最终调用其他中心接口一直报500错误。在其他部门的师兄帮助下,才发现本地环境配置文件有问题,导致调用失败。

没有其他中心的代码,直接检索日志宛如大海捞针。直接登录服务器实时查看对应服务的输出日志,访问发现没有任何日志输出,这也解释了为什么数次检索日志都没效果。

tail -f xx.log 

突然意识到本地服务有问题,于是将代码合并到测试环境后再测,有日志输出,但是我写的接口返回值是null,需要在测试环境进行debug才能找出问题。

项目启动

启动参数

java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 remote-debug-1.0.jar

后台启动

 nohup java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 mytool-0.0.1-SNAPSHOT.jar &

查看java进程启动参数

jps -l # 查看java进程
jcmd 14816 VM.command_line # 查看vm启动参数# linux 命令行查看java进程,包含命令行启动参数
ps -ef | grep java
# 或者
ps -aux | grep java

ps命令参数

  • e:显示所有进程
  • f:树形结构输出
  • a: 显示与终端相关的进程
  • x:显示不于终端相关的进程
  • u:可读”的详细格式输出进程信息,或者筛选用户
ps -eu ekko # 筛选用户
ps -e u # 所有进程可读输出

| → 管道

  • 命令A | 命令B : 命令A 的输出 → 传给 → 命令B 的输入

& → 后台执行

  • 放在命令末尾,多条命令一起执行也可以用&隔

> → 覆盖重定向 / >> → 追加重定向

  • 把命令的“标准输出(stdout)”重定向到指定的文件(覆盖写入) 命令 > 文件名

    > empty.log # 快速情况empty.log
    

nohup

  • 让命令在“终端关闭或用户退出后”仍然继续运行,不受 SIGHUP 信号影响。默认将输出写入nohup.out,通过和&一起用

    nohup java -jar myjar.jar & # 后台执行
    nohup java -jar my.jar > my.log 2>&1 & # 标准输出写入my.log,错误输出重定向到标准输入,也就是都写入my.log,顺序不能反,&1表示文件描述符1
    

grep命令

  • grep [选项] 模式 [文件...]

    grep "error" app.log # 输出包含error的行
    grep -i "error" app.log # 忽略大小写
    grep -n "warning" app.log # 显示行号
    grep -v "success" app.log # 不包含的行
    grep -l "main" *.java # 只显示文件名称,这里显示包含main且后缀为.java的
    

远程连接

创建远程调式启动配置

image-20250922223127620.png

配置远程调试ip和端口,有必要也配一下module

image-20250922223521491.png

启动,打上断点,发请求

image-20250922223654694.png