javascript
springboot设置默认值_线上Bug无法复现?老司机教你一招,SpringBoot远程调试不用愁!...
前言
- 在部署線上項(xiàng)目時(shí),相信大家都會(huì)遇到一個(gè)問(wèn)題,線上的 Bug 但是在本地不會(huì)復(fù)現(xiàn),多么無(wú)奈。
- 此時(shí)最常用的就是取到前端傳遞的數(shù)據(jù)用接口測(cè)試工具測(cè)試,比如 POSTMAN,復(fù)雜不,難受不?
- 今天陳某教你一招,讓你輕松調(diào)試線上的 Bug。文章目錄如下:
什么是 JPDA?
JPDA(Java Platform Debugger Architecture),即 Java 平臺(tái)調(diào)試體系,具體結(jié)構(gòu)圖如下圖所示。
其中實(shí)現(xiàn)調(diào)試功能的主要協(xié)議是JDWP協(xié)議,在Java SE 5以前版本,JVM 端的實(shí)現(xiàn)接口是JVMPI(Java Virtual Machine Profiler Interface),而在Java SE 5及以后版本,使用JVMTI(Java Virtual Machine Tool Interface) 來(lái)替代 JVMPI。
因此,如果使用 Java SE 5 之前版本,使用調(diào)試功能的命令為:
- 而Java SE 5及之后版本,使用調(diào)試功能的命令為:
調(diào)試命令
- 現(xiàn)在開發(fā)中最常見(jiàn)的一條遠(yuǎn)程調(diào)試的的命令如下:
參數(shù)說(shuō)明
- 基于前面的調(diào)試命令,我們來(lái)分析一下基本的參數(shù)代表什么意思。
transport
- 指定運(yùn)行的被調(diào)試應(yīng)用和調(diào)試者之間的通信協(xié)議,它由幾個(gè)可選值:
server
- 指定當(dāng)前應(yīng)用作為調(diào)試服務(wù)端還是客戶端,默認(rèn)為n。
- 如果你想將當(dāng)前應(yīng)用作為被調(diào)試應(yīng)用,設(shè)置該值為y,如果你想將當(dāng)前應(yīng)用作為客戶端,作為調(diào)試的發(fā)起者,設(shè)置該值為n。
suspend
- 當(dāng)前應(yīng)用啟動(dòng)后,是否阻塞應(yīng)用直到被連接,默認(rèn)值為y。
- 在大部分的應(yīng)用場(chǎng)景,這個(gè)值為n,即不需要應(yīng)用阻塞等待連接。一個(gè)可能為y的應(yīng)用場(chǎng)景是,你的程序在啟動(dòng)時(shí)出現(xiàn)了一個(gè)故障,為了調(diào)試,必須等到調(diào)試方連接上來(lái)后程序再啟動(dòng)。
address
- 暴露的調(diào)試連接端口,默認(rèn)值為8000。
- 此端口一定不能與項(xiàng)目端口重復(fù),且必須是服務(wù)器開放的端口。
onthrow
- 當(dāng)程序拋出設(shè)定異常時(shí),中斷調(diào)試。
onuncaught
- 當(dāng)程序拋出未捕獲異常時(shí),是否中斷調(diào)試,默認(rèn)值為 n。
launch
- 當(dāng)調(diào)試中斷時(shí),執(zhí)行的程序。
timeout
- 該參數(shù)限定為java -agentlib:jdwp=…可用,單位為毫秒ms。
- 當(dāng)suspend = y時(shí),該值表示等待連接的超時(shí);當(dāng)suspend = n時(shí),該值表示連接后的使用超時(shí)。
參考命令
-agentlib:jdwp=transport=dt_socket,server=y,address=8000:以 Socket 方式監(jiān)聽(tīng) 8000 端口,程序啟動(dòng)阻塞(suspend 的默認(rèn)值為 y)直到被連接。
-agentlib:jdwp=transport=dt_socket,server=y,address=localhost:8000,timeout=5000:以 Socket 方式監(jiān)聽(tīng) 8000 端口,當(dāng)程序啟動(dòng)后 5 秒無(wú)調(diào)試者連接的話終止,程序啟動(dòng)阻塞(suspend 的默認(rèn)值為 y)直到被連接。
-agentlib:jdwp=transport=dt_shmem,server=y,suspend=n:選擇可用的共享內(nèi)存連接地址并使用 stdout 打印,程序啟動(dòng)不阻塞。
-agentlib:jdwp=transport=dt_socket,address=myhost:8000:以 socket 方式連接到myhost:8000上的調(diào)試程序,在連接成功前啟動(dòng)阻塞。
-agentlib:jdwp=transport=dt_socket,server=y,address=8000,onthrow=java.io.IOException,launch=/usr/local/bin/debugstub:以 Socket 方式監(jiān)聽(tīng) 8000 端口,程序啟動(dòng)阻塞(suspend 的默認(rèn)值為 y)直到被連接。當(dāng)拋出 IOException 時(shí)中斷調(diào)試,轉(zhuǎn)而執(zhí)行usr/local/bin/debugstub程序。
IDEA 遠(yuǎn)程調(diào)試示例
- 首先打包 SpringBoot 項(xiàng)目,在服務(wù)器上運(yùn)行,執(zhí)行以下命令:
出現(xiàn)下圖的界面,表示運(yùn)行成功:
然后在 IDEA 中,點(diǎn)擊Edit Configurations,在彈框中點(diǎn)擊+號(hào),然后選擇Remote。
填寫服務(wù)器的地址及端口,點(diǎn)擊 OK 即可。
配置完畢后,DEBUG 調(diào)試運(yùn)行即可。
配置完畢后點(diǎn)擊保存即可,因?yàn)槲遗渲玫?suspend=n,因此服務(wù)端程序無(wú)需阻塞等待我們的連接。我們點(diǎn)擊 IDEA 調(diào)試按鈕,當(dāng)我訪問(wèn)某一接口時(shí),能夠正常調(diào)試。
總結(jié)
以上是生活随笔為你收集整理的springboot设置默认值_线上Bug无法复现?老司机教你一招,SpringBoot远程调试不用愁!...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 线性分组码的最小汉明距为6_第二章 线性
- 下一篇: android 电话号码标记,强化电话标