蓝天

jdb调试程序

1) jdb调试正在运行的进程:
先使用jps先确定进程号,然后让jdb连接上目标进程(23549换成实际的进程号):
jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=23549


接着,可以使用thread N切换线程(使用threads命令可以查看有哪些线程),如:thread 1,然后就可以使用where命令查看调用栈了(jdb中的where相当于gdb的bt)。


2) jdb调试未运行的程序:
程序代码:
hadoop@hadoop-137-143:~/hbase> cat Hello.java
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
编译:
hadoop@hadoop-137-143:~/hbase> javac Hello.java  


运行:
hadoop@hadoop-137-143:~/hbase> java Hello
Error: Could not find or load main class Hello


运行报错,设置CLASSPATH后再运行:
hadoop@hadoop-137-143:~/hbase> export CLASSPATH=.
hadoop@hadoop-137-143:~/hbase> java Hello
Hello World!


运行成功了,如果不想设置CLASSPATH,下面这样也可以运行成功:
hadoop@hadoop-137-143:~/hbase> java -classpath . Hello
Hello World!
也就是利用参数“-classpath”达到同样的效果。


开始调试,执行下面命令进入jdb:
jdb -classpath . Hello


设置断点在main()函数:
> stop in Hello.main
Deferring breakpoint Hello.main.
It will be set after the class is loaded.


运行到断点:
> run
run Hello


运行下一步:
main[1] next
> Hello World!


退出:
main[1] quit

posted on 2015-11-04 09:04  #蓝天  阅读(430)  评论(0编辑  收藏  举报

导航