因为mvn tomcat6:run是使用embedded tomcat的方式,所以,debug必须经过配置Maven实现,在环境变量中配置:java
MAVEN_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
其中,address=8000表示经过JDB链接的端口为8000。配置完成后,运行mvn tomcat6:run 会启动8000端口,用于JDWP调试。shell
在命令行中运行:编程
jdb –connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000
能够经过jdb的命令添加断点,并进行调试,经常使用的命令以下:数组
** 命令列表 ** connectors -- 列出此 VM 中可用的链接器和传输器 run [类 [参数]] -- 开始执行应用程序的主类 threads [线程组] -- 列出线程 thread <线程 ID> -- 设置默认线程 suspend [线程 ID] -- 暂停线程(默认值为 all) resume [线程 ID] -- 恢复线程(默认值为 all) where [<线程 ID> | all] -- 转储线程的堆栈 wherei [<线程 ID> | all] -- 转储线程的堆栈以及 pc 信息 up [n 帧] -- 向上移动线程的堆栈 down [n 帧] -- 向下移动线程的堆栈 kill <线程 ID> <表达式> -- 停止具备给定的异常对象的线程 interrupt <线程 ID> -- 中断线程 print <表达式> -- 输出表达式的值 dump <表达式> -- 输出全部对象信息 eval <表达式> -- 计算表达式的值(与 print 做用相同) set <lvalue> = <表达式> -- 为字段/变量/数组元素指定新值 locals -- 输出当前堆栈帧中的全部本地变量 classes -- 列出当前已知的类 class <类 ID> -- 显示已命名类的详细信息 methods <类 ID> -- 列出类的方法 fields <类 ID> -- 列出类的字段 threadgroups -- 列出线程组 threadgroup <名称> -- 设置当前线程组 stop in <类 ID>.<方法>[(参数类型,...)] -- 在方法中设置断点 stop at <类 ID>:<行> -- 在行中设置断点 clear <类 ID>.<方法>[(参数类型,...)] -- 清除方法中的断点 clear <类 ID>:<行> -- 清除行中的断点 clear -- 列出断点 catch [uncaught|caught|all] <类 ID>|<类模式> -- 出现指定的异常时中断 ignore [uncaught|caught|all] <类 ID>|<类模式> -- 对于指定的异常,取消 'catch' watch [access|all] <类 ID>.<字段名> -- 监视对字段的访问/修改 unwatch [access|all] <类 ID>.<字段名> -- 中止监视对字段的访问/修改 trace [go] methods [thread] -- 跟踪方法的进入和退出。 -- 除非指定 'go',不然全部线程都将暂停 trace [go] method exit | exits [thread] -- 跟踪当前方法的退出或全部方法的退出 -- 除非指定 'go',不然全部线程都将暂停 untrace [方法] -- 中止跟踪方法的进入和/或退出 step -- 执行当前行 step up -- 执行到当前方法返回其调用方 stepi -- 执行当前指令 next -- 跳过一行(跨过调用) cont -- 从断点处继续执行 list [line number|method] -- 输出源代码 use(或 sourcepath)[源文件路径] -- 显示或更改源路径 exclude [<类模式>, ...|“无”] -- 不报告指定类的步骤或方法事件 classpath -- 从目标 VM 输出类路径信息 monitor <命令> -- 每次程序中止时执行命令 monitor -- 列出监视器 unmonitor <监视器号> -- 删除某个监视器 read <文件名> -- 读取并执行某个命令文件 lock <表达式> -- 输出对象的锁信息 threadlocks [线程 ID] -- 输出线程的锁信息 pop -- 弹出整个堆栈,且包含当前帧 reenter -- 与 pop 做用相同,但从新进入当前帧 redefine <类 ID> <类文件名> -- 从新定义类代码 disablegc <表达式> -- 禁止对象的垃圾回收 enablegc <表达式> -- 容许对象的垃圾回收 !! -- 重复执行最后一个命令 <n> <命令> -- 将命令重复执行 n 次 # <命令> -- 放弃(不执行) help(或 ?) -- 列出命令 version -- 输出版本信息 exit(或 quit) -- 退出调试器 <类 ID>: 带有软件包限定符的完整类名 <类模式>: 带有前导或后缀通配符 (*) 的类名 <线程 ID>: 'threads' 命令中所报告的线程号 <表达式>: Java(TM) 编程语言表达式。 支持大多数常见语法。
普通运行Java调试方式以下:tomcat
java -agentlib:jdwp=transport=dt_socket,address=localhost:8888,server=y, suspend=y Hello