偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

手把手教你IDEA進(jìn)行遠(yuǎn)程Debug調(diào)試的來(lái)龍去脈

開(kāi)發(fā) 后端
JPDA(Java Platform Debugger Architecture)是 Java 平臺(tái)調(diào)試體系結(jié)構(gòu)的縮寫(xiě),它是 Java 開(kāi)發(fā)工具包(JDK)中提供的一組 API 和協(xié)議,用于支持 Java 程序的調(diào)試。

一、前言

我們?cè)跍y(cè)試環(huán)境時(shí),遇到一些bug,看上下文的日志,還是無(wú)法判斷出問(wèn)題所在時(shí),此時(shí)需要Debug來(lái)解決。

為了更方便、更高效地定位和解決問(wèn)題,遠(yuǎn)程調(diào)試成為一種常見(jiàn)的實(shí)踐方式。

這個(gè)還是不建議在生產(chǎn)中使用,可以在測(cè)試環(huán)境走和生產(chǎn)一樣的單據(jù)來(lái)Debug。要是生產(chǎn)環(huán)境忘記去掉斷點(diǎn),直接炸了!

「還是不到萬(wàn)不得已不要在生產(chǎn)使用,使用完也要把本地的斷點(diǎn)全部取消掉!」

二、JPDA

在實(shí)戰(zhàn)之前,我們可以了解一下JPDA!能夠遠(yuǎn)程Debug就是使用這個(gè)技術(shù)實(shí)現(xiàn)的!

1、概念

JPDA(Java Platform Debugger Architecture)是 Java 平臺(tái)調(diào)試體系結(jié)構(gòu)的縮寫(xiě),它是 Java 開(kāi)發(fā)工具包(JDK)中提供的一組 API 和協(xié)議,用于支持 Java 程序的調(diào)試。

2、核心組件

Java 虛擬機(jī)工具接口(JVMTI): JVMTI 提供了在 Java 虛擬機(jī) (JVM) 中運(yùn)行時(shí)監(jiān)視和檢測(cè)的一組 API。它允許調(diào)試器在運(yùn)行時(shí)獲取有關(guān)類、對(duì)象、線程等信息,并在程序執(zhí)行時(shí)進(jìn)行干預(yù)。

Java 調(diào)試器接口(JDI): JDI 是在 JPDA 中用于編寫(xiě)調(diào)試器的 Java API。它允許開(kāi)發(fā)者通過(guò) Java 語(yǔ)言編寫(xiě)調(diào)試器,實(shí)現(xiàn)與 JVM 的通信和控制。

Java 虛擬機(jī)調(diào)試協(xié)議(JDWP): JDWP 是 JVM 與調(diào)試器之間通信的協(xié)議。它定義了調(diào)試器如何與 JVM 進(jìn)行通信,包括斷點(diǎn)設(shè)置、變量檢查、執(zhí)行控制等。

3、調(diào)試功能

斷點(diǎn)設(shè)置: 在代碼中設(shè)置斷點(diǎn),以便在執(zhí)行到特定代碼行時(shí)暫停程序的執(zhí)行。

變量檢查: 查看和修改程序中的變量值。 

單步執(zhí)行: 逐步執(zhí)行程序,以便更詳細(xì)地檢查代碼的執(zhí)行過(guò)程。 

異常處理: 在程序拋出異常時(shí)停止執(zhí)行,以進(jìn)行異常處理。

三、Idea實(shí)戰(zhàn)

非常的簡(jiǎn)單就是運(yùn)行Jar包的時(shí)候加上命令,在Idea配置上遠(yuǎn)程調(diào)試就行了!

1、Jar包準(zhǔn)備

新建一個(gè)項(xiàng)目或者使用公司的項(xiàng)目,打成Jar包。為了模擬真實(shí)性,我們?cè)趙indows里運(yùn)行Jar包一次,然后上傳到虛擬機(jī)里運(yùn)行一次!

自己寫(xiě)一個(gè)Controller,接收請(qǐng)求,多寫(xiě)幾行方便打斷點(diǎn):

/**
 * @author wangzhenjun
 * @date 2023/11/28 15:54
 */
@RequestMapping("/test")
@RestController
public class TestController {

    @GetMapping("/list")
    public String list (){
        System.out.println("======1======");
        System.out.println("======2======");
        System.out.println("======3======");
        System.out.println("======4======");
        return "成功";
    }
}

2、Idea配置遠(yuǎn)程監(jiān)聽(tīng)

此時(shí)Idea已經(jīng)把運(yùn)行Jar包的命令給我們了!

3、運(yùn)行Jar包

找到j(luò)ar所在位置,執(zhí)行命令:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8088 -jar demo-0.0.1-SNAPSHOT.jar

我們來(lái)解釋一下命令的意義:

-agentlib:jdwp:?jiǎn)⒂?JDWP 調(diào)試支持。

transport=dt_socket:指定 JDWP 調(diào)試器和 JVM 之間的通信方式為 socket 傳輸。

transport 參數(shù)有兩種常見(jiàn)的模式,分別是 dt_socket 和 dt_shmem。

「dt_socket:使用 socket 傳輸模式,一般用于調(diào)試服務(wù)器運(yùn)行 dt_shmem:使用共享內(nèi)存?zhèn)鬏斈J?,一般用于本地調(diào)試,因?yàn)楣蚕韮?nèi)存需要在同一臺(tái)物理機(jī)器上才能正常工作?!?/p>

server=y:表示 JVM 將作為調(diào)試服務(wù)器運(yùn)行,等待調(diào)試器連接。

suspend=n:指定 JVM 在啟動(dòng)后是否暫停等待調(diào)試器連接。n 表示不暫停,即 JVM 在啟動(dòng)后立即執(zhí)行應(yīng)用程序。如果設(shè)置為 y,則 JVM 啟動(dòng)后會(huì)等待調(diào)試器連接,直到調(diào)試器連接上為止。

address=8088: 指定調(diào)試器連接的端口號(hào),和Idea監(jiān)聽(tīng)的端口一致。

我們先訪問(wèn)一下,控制臺(tái)是可以打印我們的日志!

4、測(cè)試

我們啟動(dòng)Idea配置好的監(jiān)聽(tīng),然后再打上斷點(diǎn)!

訪問(wèn)接口,成功攔截到請(qǐng)求!

放行后,查看控制臺(tái)正常輸出:

此時(shí)我們使用虛擬機(jī)里的Jar包啟動(dòng)!

「需要我們把Idea中的本地IP換成虛擬機(jī)的IP」

重新訪問(wèn),沒(méi)有問(wèn)題,我們放行后正常打印!

四、總結(jié)

是不是非常的簡(jiǎn)單,大家可以自己試一下,這里還是在測(cè)試環(huán)境玩玩就行。

這種方式還有弊端,現(xiàn)在一般都是容器化部署,這種命令就不太好使了,感興趣的可以試試使用docker容器來(lái)發(fā)布!

是不是發(fā)布完之后,把Jar包掛載出來(lái),然后再運(yùn)行一遍專門(mén)來(lái)Debug的!

責(zé)任編輯:姜華 來(lái)源: 小王博客基地
相關(guān)推薦

2022-07-22 12:45:39

GNU

2022-04-19 10:45:28

自動(dòng)化簽名鴻蒙app操作系統(tǒng)

2021-07-01 09:31:50

MySQL SQL 語(yǔ)句數(shù)據(jù)庫(kù)

2011-01-10 14:41:26

2025-05-07 00:31:30

2011-05-03 15:59:00

黑盒打印機(jī)

2021-07-14 09:00:00

JavaFX開(kāi)發(fā)應(yīng)用

2022-11-28 08:23:14

IDEAGradle配置

2022-01-09 20:26:14

Flink源代碼編譯

2021-06-04 05:18:29

ARM程序Gdbserver

2011-02-22 13:46:27

微軟SQL.NET

2021-02-26 11:54:38

MyBatis 插件接口

2021-12-28 08:38:26

Linux 中斷喚醒系統(tǒng)Linux 系統(tǒng)

2010-01-04 09:36:05

2021-02-02 13:31:35

Pycharm系統(tǒng)技巧Python

2021-09-26 16:08:23

CC++clang_forma

2022-03-14 14:47:21

HarmonyOS操作系統(tǒng)鴻蒙

2022-07-27 08:16:22

搜索引擎Lucene

2022-01-08 20:04:20

攔截系統(tǒng)調(diào)用

2023-04-26 12:46:43

DockerSpringKubernetes
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)