Tomcat使用终端debug 调试代码
【摘要】 有些时候 在本地跑的程序正常,但是放到测试环境后就不正常了,这时候我们的首选方法是打个断点跑跑,无奈测试环境没有装eclipse。现在尝试使用另一种断点的调试方法:1.使用ps -ef | grep java 命令查找tomcat进程;1.先用kill -9 pid 杀死tomcat 2.启动tomcat 使用命令 ./catalina debug>run等待启动完毕设定断点命令stop ...
有些时候 在本地跑的程序正常,但是放到测试环境后就不正常了,这时候我们的首选方法是打个断点跑跑,无奈测试环境没有装eclipse。现在尝试使用另一种断点的调试方法:
1.使用ps -ef | grep java 命令查找tomcat进程;
1.先用kill -9 pid 杀死tomcat
2.启动tomcat 使用命令 ./catalina debug
>run
等待启动完毕
设定断点命令
stop in <类 ID>.<方法>[(参数类型,...)] - 在方法中设置断点 使用 in 类名和方法名用 . 分割
stop at <类 ID>:<行> - 在行中设置断点 使用的是at 类名与行号用 : 分割
例如:
>stop in org.scf.portlet.projectcostmanagenew.util.DaysCostDetailFinderUtil.findByPeriodAndPid() --给方法添加断点
>stop at org.scf.portlet.projectcostmanagenew.util.DaysCostDetailFinderUtil:402 ----给该类的402添加断点
查看断点的命令:
>clear
显示的信息如下:
断点集:
断点 org.scf.portlet.projectcostmanagenew.util.DaysCostDetailFinderUtil:402
去掉断点 和添加断点类似
命令:
clear <类 ID>.<方法>[(参数类型,...)] - 清除方法中的断点
clear <类 ID>:<行> - 清除行中的断点
例如:
> clear org.scf.portlet.projectcostmanagenew.util.DaysCostDetailFinderUtil.findByPeriodAndPid --清除方法断点
已删除: 断点 org.scf.portlet.projectcostmanagenew.util.DaysCostDetailFinderUtil.findByPeriodAndPid
> clear org.scf.portlet.projectcostmanagenew.util.DaysCostDetailFinderUtil:402 ---清除行断点
已删除: 断点 org.scf.portlet.projectcostmanagenew.util.DaysCostDetailFinderUtil:402
查看类相关信息
classes - 列出当前已知的类
class <类 ID> - 显示已命名的类的详细信息
methods <类 ID> - 列出类的方法
fields <类 ID> - 列出类的字段
当我们设置好断点之后就是调试步骤了:
设置断点
> stop at org.scf.portlet.projectcostmanagenew.util.DaysCostDetailFinderUtil:402
设置 断点 org.scf.portlet.projectcostmanagenew.util.DaysCostDetailFinderUtil:402
点击前台页面 后台自动捕获断点
断点命中: "thread=http-8080-2", org.scf.portlet.projectcostmanagenew.util.DaysCostDetailFinderUtil.findByPeriodAndPid(), line=402 bci=0
前台进入等待
取消本次断点调试命令
>cont
这个命令也许要输入两次(具体原因未知)
>step - 执行当前行 (如果是调用的外部方法 会进入到方法内部 跳出使用step up命令)
>step up - 执行到当前方法返回到其调用程序(当使用step进入的时候会 跳出到断点执行的行)
>stepi - 执行当前指令(执行当前行,一次次的执行)
>next - 跳过一行(跨过调用)(执行下一行)
>cont - 从断点处继续执行
查看变量的值(这个是我们跟踪的主要目的);
我们查看当前类都包含那些变量使用的命令是:
fields <类 ID> - 列出类的字段
查找某个方法含有的局部变量使用:
locals - 输出当前堆栈帧中的所有局部变量
print <表达式> - 输出表达式的值
dump <表达式> - 输出所有对象信息
eval <表达式> - 输出表达式的值(与 print 相同)
set <lvalue> = <表达式> - 为字段/变量/数组元素指定新值
查找当前方法含有的变量
http-8080-6[1] locals
方法参数:
pid = ""
period = "2012-01"
contractId = ""
projectName = ""
proDirectorName = ""
PM = ""
stuff = ""
grade = "ALL"
jobDis = ""
reportCostcenter = ""
proSupportCostcenter = ""
proSupportCostcenters = "ALL"
start = 0
delta = 10
打印某个变量的值
http-8080-6[1] print start
start = 0
给start赋值为 10
http-8080-6[1] set start=10
以上是断点调试的大体步骤,感觉大约都能实现eclipse的调试功能;
catalina.out debug 还有很多的用法。可以使用help命令 具体查看;
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)