大家好,我是曹尼瑪,剛從培訓機構畢業,去一家單位上班一周了…
這一周專案經理讓我熟悉了專案業務,架構和設計,不算難,憑借我培訓機構第一名的成績,還是很順溜,
今天專案經理把同事們叫到一起,說線上438x6專案出現奇葩問題,但是開發環境初步測驗沒問題,需要配合測驗部的小姐姐們在測驗環境遠程debug跟蹤下,排查下問題,以及正式環境日志也會提供,重現下問題,解決下bug;
專案經理見我這幾天比較悠閑
所以就對我說,“曹尼瑪,這個小任務就交給你了”
“我,我,我,我不會遠程debug,沒聽過什么是遠程debug”;
我看到同事都忍不住笑出來了,專案經理也鄙視的笑了,
哎,培訓機構只教了debug本地除錯,何況還沒練熟呢,遠程debug都沒聽過,
后來散會,專案經理單獨找我訓話;
“簡歷2年開發經驗,遠程debug都不會,你是干什么吃的,明天下班前把bug找到,否則直接滾蛋”
靠,包裝簡歷和經驗,露餡了
趕緊學吧,加班熬夜學習了下,第二天上午通過遠程debug,配合線上日志,最終找到了問題;
順便總結了下,寫了篇遠程debug除錯文章分享給大家,以及錄制了一個遠程debug視頻教程;希望大家早日學會,不要被他人嘲笑和鄙視!
這里正式開始筆記內容;文末附上視頻教程下載地址(白嫖0積分下載)
1,遠程DEBUG的必要性
由于部署環境的差異性,相信很多朋友都碰到過開發環境正常測驗過的功能在測驗環境甚至生產環境下出現bug的情況,一般情況下,生產環境可以采取的手段比較單一,即通過日志的方式獲取運行中的環境背景關系,分析日志檔案并嘗試重現bug,這會帶來的問題還是不少的,首先,日志的分析是一項比較耗時的作業;其次,現有的日志記錄不一定能反映出問題,你可能需要多次重復這個程序(分析日志->猜測問題->加日志->部署->獲取日志)來慢慢逼近問題,倘若是測驗環境,我們還多了一項可供選擇的手段——遠程除錯——將程式在測驗環境中以debug模式啟動,在本機使用IDEA在工程中設定斷點進行除錯,
2,IDEA構建SpringBoot測驗Demo
新建SpringBoot測驗專案remote-debug,只需要web依賴支持即可;版本選用2.2.6.RELEASE(注意,別用2.5.1版本,有坑,親測)
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.java1234</groupId>
<artifactId>remote-debug</artifactId>
<version>v1.0</version>
<name>remote-debug</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.yml:
server:
port: 80
servlet:
context-path: /
tomcat:
uri-encoding: utf-8
簡單搞個TestController,提供一個Rest介面
package com.java1234.controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author java1234_小鋒
* @site www.java1234.com
* @company Java知識分享網
* @create 2021-06-12 15:37
*/
@RestController
public class TestController {
@PostMapping("/test")
public String test(Integer id,String name){
System.out.println("id="+id);
System.out.println("name="+name);
if(id>0){
return "success "+name;
}else{
return "fail";
}
}
}
我們啟動專案,用postman測驗下:
測驗介面:http://localhost/test 加入Body form-data 引數 id=1,name=marry,Send 測驗,回傳 success marry,測驗OK;
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qPf6tyol-1623688298210)(image-20210613222730931.png)]](https://img.uj5u.com/2021/06/16/2451711620292511.png)
3,測驗Demo專案配置支持遠程除錯
pom.xml里配置jvmArguments引數 -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n</jvmArguments>
</configuration>
</plugin>
</plugins>
</build>
加了此配置后,打包后的專案發布服務器,可支持遠程DEBUG;
具體引數詳解:
-Xdebug 通知JVM作業在DEBUG模式下;
-Xrunjdwp 通知JVM使用(Java debug wire protocol)運行除錯環境,該引數同時包含了一系列的除錯選項;
**transport **指定了除錯資料的傳送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享記憶體方式,其中,dt_shmem只適用于Windows平臺;
address 除錯服務器的埠號,客戶端用來連接服務器的埠號;
server=y/n VM 是否需要作為除錯服務器執行;
suspend=y/n 是否在除錯客戶端建立連接之后啟動 VM;
4,IDEA打包jar
我們打包jar包;
右側Maven工具,雙擊 package打包工具;
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3t35X1S1-1623688298215)(image-20210613224738500.png)]](https://img.uj5u.com/2021/06/16/2451711620292512.png)
一般打包跳過test,可以點擊箭頭所指閃電圖示,這樣打包速度會快很多;
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-gjGv5k7R-1623688298218)(image-20210613224828589.png)]](https://img.uj5u.com/2021/06/16/2451711620292513.png)
打包后,在target目錄下,會生成一個jar包;我們把它復制出來即可;
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-K5FN6ULx-1623688298222)(image-20210613224918420.png)]](https://img.uj5u.com/2021/06/16/2451711620292514.png)
5,啟動jar并且帶啟動引數支持遠程除錯
我們把remote-debug-v1.0.jar放D盤根目錄;
我們啟動jar,并且支持遠程DEBUG;
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar remote-debug-v1.0.jar
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-RERGHClm-1623688298225)(image-20210613225414441.png)]](https://img.uj5u.com/2021/06/16/2451711620292515.png)
啟動OK,監聽socket 5005埠
6,IDEA遠程DEBUG配置
IDEA要進行遠程DEBUG,需要進行配置;
1,啟動項下拉,選擇 Edit Configurations...編輯配置
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3UGDXNMD-1623688298228)(image-20210613225801811.png)]](https://img.uj5u.com/2021/06/16/245171162029252.png)
2,點擊+,選擇Remote,添加遠程DEBUG配置
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3rzwtdYm-1623688298229)(image-20210613230023399.png)]](https://img.uj5u.com/2021/06/16/2451711620292516.png)
3,添加遠程DEBUG配置項,Host和Port,配置后,點擊Apply和OK按鈕
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-l0edF9KU-1623688298231)(image-20210613230200362.png)]](https://img.uj5u.com/2021/06/16/2451711620292517.png)
7,IDEA遠程DEBUG測驗
1,打測驗斷點
我們直接在TestController類里的test方法上打點斷;
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-2MqDENbp-1623688298232)(image-20210613230809384.png)]](https://img.uj5u.com/2021/06/16/2451711620292518.png)
2,選擇遠程debug啟動項,然后點擊測驗除錯按鈕啟動;
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HWmN2f6b-1623688298234)(image-20210613230646749.png)]](https://img.uj5u.com/2021/06/16/245171162029253.png)
3,postman測驗
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-VJrvld2D-1623688298236)(image-20210613231151240.png)]](https://img.uj5u.com/2021/06/16/2451711620292519.png)
4,成功進入斷點
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-BeCKrJS3-1623688298238)(image-20210613231235544.png)]](https://img.uj5u.com/2021/06/16/2451711620292520.png)
我們走完斷點;
5,啟動的jar包列印資訊,測驗OK
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-waIbt2vf-1623688298241)(image-20210613231336792.png)]](https://img.uj5u.com/2021/06/16/2451711620292521.png)
8,eclipse遠程DEBUG實作
1,右擊專案 -> Debug As -> Debug Configurations…
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-NCIa03JQ-1623688298243)(image-20210613232154571.png)]](https://img.uj5u.com/2021/06/16/2451711620292522.png)
2,找到 Remote Java Application 然后右擊 New
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-o1TZdUQg-1623688298245)(image-20210613232409021.png)]](https://img.uj5u.com/2021/06/16/245171162029254.png)
3,配置Host和Port,點擊Debug按鈕,即可實作遠程DEBUG
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-pDNULzPO-1623688298248)(image-20210613232629335.png)]](https://img.uj5u.com/2021/06/16/2451711620292523.png)
9,打war包方式配置遠程DEBUG
如果打的是war包,需要兩個步驟:
-
將 web 應用部署到 Tomcat 的 webapp 目錄下
-
修改 Tomcat/bin/startup.bat 檔案,在最前面加上如下代碼:
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
10,遠程debug視頻教程+檔案+原始碼下載
鏈接:https://pan.baidu.com/s/1Xd75eAOXcvAnBax7VFsnjQ
提取碼:1234
假如鏈接失效,請加鋒哥WX: java3459
微信搜一搜【java1234】關注這個放蕩不羈的程式員,關注后回復【資料】有我準備的一線大廠筆試面試資料以及簡歷模板,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/287946.html
標籤:java
上一篇:android 仿微信demo————微信訊息界面實作(移動端)
下一篇:Python自動化腳本登錄校園網







