对于分布式系统的调试不知道你们有什么好的方法。对于我来讲,在知道远程调试这个方法以前就是在代码中打各类log,而后从新部署,上线,调试,这样比较费时。今天我们来了解了解Java远程调试这个牛逼的功能,本文以Intellij IDEA为例讲解怎么使用远程调试。以Thrift入门教程这篇文章中使用的程序做为例子。这个程序由Thrift服务端和客户端组成。描述一下远程调试须要解决的问题:服务器
服务端程序运行在一台远程服务器上,咱们能够在本地服务端的代码(前提是本地的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时可以在本地知道远程服务端的此时的内部状态。socket
下面按照步骤介绍怎么远程debug。分布式
要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是:spa
其中的${debug_port}是用户自定义的,为debug端口,本例以5555端口为例。debug
打开Intellij IDEA,在顶部靠右的地方选择”Edit Configurations…”,进去以后点击+号,选择”Remote”,按照下图的只是填写红框内的内容,其中host为远程代码运行的机器的ip/hostname,port为上一步指定的debug_port,本例是5555
3d
而后点击Apply,最后点击OK便可调试
如今在上一步选择”Edit Configurations…”的下拉框的位置选择上一步建立的remote的名字,而后点击右边的debug按钮(长的像臭虫那个),看控制台日志,若是出现相似“Connected to the target VM, address: ‘xx.xx.xx.xx:5555’, transport: ‘socket’”的字样,就表示链接成功过了。
日志
远程debug模式已经开启,如今能够在须要调试的代码中打断点了,好比:
blog
如图中所示,若是断点内有√,则表示选取的断点正确。教程
如今在本地发送一个到远程服务器的请求,看本地控制台的bug界面,划到debugger这个标签,能够看到当前远程服务的内部状态(各类变量)已经所有显示出来了,而且在刚才设置了断点的地方,也显示了该行的变量值。