成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

代碼上線了,怎么用本地 IntelliJ IDEA 遠程調試問題?

開發 前端
對于這里的報錯,當你沒有 debug 手段的時候,就要把前后的報錯數據,都要復制到本地,通過 mock 的方式驗證程序邏輯,一點點排查。不過,這個過程也要花費好長時間,尤其是一些復雜的邏輯與外部交互又非常多的時候,調試起來很耗費時間。

一、測試工程

1. 測試接口

2. Dockerfile

3. DockerCompose 部署腳本

二、部署程序

1. 打包程序

2. 構建鏡像

3. 發布項目

三、調試程序

1. IntelliJ IDEA 配置

2. 導入接口

3. 遠程調試

我遇到過一種bug場景,本地沒什么問題,部署到服務器上就不行了。往往遇到這樣的問題,要花費大量的時間檢查程序邏輯,一個個方法 mock 測試驗證。那有人會問了,你怎么不在本地 debug 調試下呢?

你的代碼本地沒法啟動!

其實并不是所有的工程代碼,都能本地啟動運行的。尤其復雜的工程,與外部對接非常多,甚至還有一些是風險控制的問題,本地是不能啟動直接調用的。也就是控制研發人員,不允許本地程序調用其他程序的接口。那么對于這樣的工程,研發的自測就要通過編寫 mock 方式進行單元化測試。

不過這里會有一個問題,單元化的測試,mock 的數據是不會隨著外部所有程序的調整動態的變更的,而是隨著研發編寫需求,一次寫好后,后續如果這個功能沒有被調整,那么 mock 測試也不會在調整了。同時還因為 mock 覆蓋的場景不全,不知道引入的外部那么多接口都有哪些新增的邏輯。因而,你可能本地運行沒問題,但部署到測試環境,就會有一些不缺性的報錯。

對于這里的報錯,當你沒有 debug 手段的時候,就要把前后的報錯數據,都要復制到本地,通過 mock 的方式驗證程序邏輯,一點點排查。不過,這個過程也要花費好長時間,尤其是一些復雜的邏輯與外部交互又非常多的時候,調試起來很耗費時間。

所以,程序員??????對于實在難以調試的代碼,還有一種方式就是遠程調試。把代碼部署到服務器,通過請求服務器的接口,本地的 IntelliJ IDEA 打開的工程,就可以調試對應的運行數據。可以非常高效的解決 bug!

接下來,小傅哥就帶著大家做一個這樣的案例。如果你是一個新手小白,就更有必要學習一下這樣的手段了。

一、測試工程

這里小傅哥為你準備好了一個測試工程,你可以直接下載驗證。

圖片圖片

  • 地址:https://github.com/fuzhengwei/xfg-dev-tech-remote-jvm-debug
  • 環境:JDK 1.8、SpringBoot 2.7
  • 如圖,工程提供了簡單的 TestApiController 一個 http 測試入口。之后通過 Dockerfie 方式構建鏡像,以及提供了 docker-compose-app.yml 啟動工程。重要的是 JAVA_REMOTE_DEBUG 的配置。這是一種 JavaAgent 技術,如果感興趣可以進入小傅哥的博客,https://bugstack.cn/ 字節碼編程中學習。

1. 測試接口

@Slf4j
@RestController()
@CrossOrigin("*")
@RequestMapping("/api/v1/test/")
publicclass TestApiController {

    /**
     * curl --request POST \
     *   --url 'http://127.0.01:8091/xfg/api/v1/test/group_buy_notify?requestDTO=1111'
     *
     * 注意,yml 里配置了應用根目錄;server.servlet.context-path: /xfg
     */
    @RequestMapping(value = "group_buy_notify", method = RequestMethod.POST)
    public String groupBuyNotify(@RequestParam String requestDTO) {
        log.info("請求參數 {}", JSON.toJSONString(requestDTO));

        return"success";
    }

}
  • 一個簡單的測試接口,訪問接口地址為;http://127.0.01:8091/xfg/api/v1/test/group_buy_notify?requestDTO=1111
  • 你可以復制 curl 部分,導入到 apipost/apifox 等工具里使用。

2. Dockerfile

# 基礎鏡像
FROM openjdk:8-jre-slim

# 作者
MAINTAINER xiaofuge

# 配置
ENV PARAMS=""

# 時區
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 添加應用
ADD target/xfg-dev-tech-remote-jvm-debug-app.jar /xfg-dev-tech-remote-jvm-debug-app.jar
EXPOSE 80915005

ENTRYPOINT ["sh","-c","java $JAVA_REMOTE_DEBUG -jar $JAVA_OPTS /xfg-dev-tech-remote-jvm-debug-app.jar $PARAMS"]
  • ENTRYPOINT,添加了一個 $JAVA_REMOTE_DEBUG 的動態入參,其實這個位置要填入的就是 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005 但并不是上線的所有程序都要做這樣的事情,一般只有測試環境才需要。
  • EXPOSE 8091 5005 對外暴漏應用程序所需的 8091 5005 端口。

3. DockerCompose 部署腳本

# /usr/local/bin/docker-compose -f /docs/dev-ops/environment/environment-docker-compose-2.4.yml up -d
version: '3.8'
# docker-compose -f docker-compose-app.yml up -d
services:
  xfg-dev-tech-remote-jvm-debug-app:
    image: fuzhengwei/xfg-dev-tech-remote-jvm-debug-app:1.0
    container_name: xfg-dev-tech-remote-jvm-debug-app
    restart: on-failure
    ports:
      - "5005:5005"
      - "8091:8091"
    environment:
      - TZ=PRC
      - SERVER_PORT=8091
      # 2c4g 配置,4c8g 翻倍,-Xms4096m -Xmx4096m | -Xmx –Xms:指定java堆最大值(默認值是物理內存的1/4(<1GB))和初始java堆最小值(默認值是物理內存的1/64(<1GB))
      - JAVA_OPTS=-Xms2048m -Xmx2048m
      - JAVA_REMOTE_DEBUG=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005
    volumes:
      - ./log:/data/log
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    networks:
      - my-network

networks:
  my-network:
    driver: bridge
  • 部署服務注意,要對外提供 5005、8091 兩個映射端口。對于這種端口的暴漏說明,我已經提供好了基礎教程,可以在這里擴展學習;https://bugstack.cn/md/road-map/docker-what.html
  • 另外在 environment 環境中,配置 - JAVA_REMOTE_DEBUG=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005 這樣就可以把遠側調試的服務給啟動起來了。相當于你在自己的電腦的 IntelliJ IDEA 與服務器上的應用,通過 5005 端口進行通信完成測試debug驗證。

二、部署程序

確保你自己本地已經安裝好了 Docker Mac、Windows 電腦都可以安裝。

1. 打包程序

圖片圖片

  • 通過 IntelliJ Install 打包程序。其實就是 Maven 命令,mvn clean install 的操作。

2. 構建鏡像

圖片圖片

  • mac 電腦可以點綠色箭頭。
  • windows 電腦,可以通過 powershell 執行 ./build.sh

3. 發布項目

圖片圖片

圖片圖片

  • mac 點擊綠色箭頭啟動程序即可。
  • windows 打開 powershell 執行腳本 docker-compose -f docker-compose-app.yml up -d

三、調試程序

1. IntelliJ IDEA 配置

圖片圖片

  • 首先,在運行調試按鈕那,點擊下拉框。增加一個新的調試配置。
  • 之后,點擊+號,添加 Remote JVM Debug
  • 最后,填寫 IP 地址和端口,點擊 Apply OK 即可。

2. 導入接口

圖片圖片

  • 導入接口到 ApiPost 中調用。其他的工具也可以,這樣接口可以保存起來,方便以后調試。

3. 遠程調試

3.1 啟動程序

圖片圖片

  • 以新建的遠程 debug 方式,啟動程序。

3.2 添加斷點

圖片圖片

  • 添加斷點。注意,這會的程序部署的要一致,不能動代碼。否則和遠程部署的不一致,是不能調試的。

3.3 調用接口

圖片圖片

圖片圖片

首先,在 ApiPost 中點擊【發送】按鈕。 - 這會,你可以在打了斷點的程序中,查看到請求的調用會進來。最終執行完,遠程的部署的程序也會執行完。

責任編輯:武曉燕 來源: buystack蟲洞棧
相關推薦

2020-10-10 11:07:38

Java開發代碼

2023-06-28 08:48:51

2020-05-25 15:40:23

IntelliJ IDEclipse強Java

2013-06-07 10:18:00

EclipseIntelliJ ID

2023-07-06 14:37:05

2009-12-21 16:36:08

ADO.Net數據庫

2020-12-02 11:18:50

print調試代碼Python

2020-12-04 10:05:00

Pythonprint代碼

2012-05-18 15:37:01

JavaIntelliJ

2023-10-11 16:12:07

2024-01-05 18:01:17

高并發策略程序

2022-02-09 15:02:01

ideadocker遠程熱部署

2024-02-19 18:04:32

Git功能項目

2009-12-03 16:50:58

Visual Basi

2009-12-01 18:51:48

家庭路由器安裝

2023-11-05 19:46:56

JavaIntelliJ代碼

2023-12-13 08:17:24

JPDAJavaDebug

2012-02-02 15:14:29

Node.js

2024-07-29 08:01:32

2009-11-30 16:19:47

VS調試問題
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一区二区三区视频在线 | 精品熟人一区二区三区四区 | 午夜视频免费在线观看 | 网站黄色在线免费观看 | 青青草视频免费观看 | 五月综合久久 | 国产精品嫩草影院精东 | 国产精品一区一区三区 | 国产乱码高清区二区三区在线 | 国产免费福利 | 国产亚洲一区二区三区 | 欧美一区二区三区四区五区无卡码 | 久久久久久中文字幕 | 国产精品一区二区电影 | 久久最新精品视频 | 久久av一区二区三区 | 久久精品在线 | 久久综合久久自在自线精品自 | 第四色狠狠 | 亚洲一区视频在线 | 国产精品成人一区二区三区 | 欧美黑人一区二区三区 | 久久久久成人精品 | 精品国产一区二区三区性色 | 久久精品亚洲一区二区三区浴池 | 91传媒在线观看 | 亚洲精品一区二区三区中文字幕 | 国产一区二区精品在线观看 | 日韩一区二区三区在线视频 | 久久久999成人 | 国产精品99久久久久久动医院 | 亚洲欧洲一区 | 九九在线精品视频 | 在线观看免费福利 | 久久黄网 | 久久久久综合 | 天天天操天天天干 | 久久精品久久综合 | 一级黄色大片 | 一区二区三区精品视频 | 中文字幕在线观看一区二区 |