自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

代碼上線了,怎么用本地 IntelliJ IDEA 遠(yuǎn)程調(diào)試問(wèn)題?

開(kāi)發(fā) 前端
對(duì)于這里的報(bào)錯(cuò),當(dāng)你沒(méi)有 debug 手段的時(shí)候,就要把前后的報(bào)錯(cuò)數(shù)據(jù),都要復(fù)制到本地,通過(guò) mock 的方式驗(yàn)證程序邏輯,一點(diǎn)點(diǎn)排查。不過(guò),這個(gè)過(guò)程也要花費(fèi)好長(zhǎng)時(shí)間,尤其是一些復(fù)雜的邏輯與外部交互又非常多的時(shí)候,調(diào)試起來(lái)很耗費(fèi)時(shí)間。

一、測(cè)試工程

1. 測(cè)試接口

2. Dockerfile

3. DockerCompose 部署腳本

二、部署程序

1. 打包程序

2. 構(gòu)建鏡像

3. 發(fā)布項(xiàng)目

三、調(diào)試程序

1. IntelliJ IDEA 配置

2. 導(dǎo)入接口

3. 遠(yuǎn)程調(diào)試

我遇到過(guò)一種bug場(chǎng)景,本地沒(méi)什么問(wèn)題,部署到服務(wù)器上就不行了。往往遇到這樣的問(wèn)題,要花費(fèi)大量的時(shí)間檢查程序邏輯,一個(gè)個(gè)方法 mock 測(cè)試驗(yàn)證。那有人會(huì)問(wèn)了,你怎么不在本地 debug 調(diào)試下呢?

你的代碼本地沒(méi)法啟動(dòng)!

其實(shí)并不是所有的工程代碼,都能本地啟動(dòng)運(yùn)行的。尤其復(fù)雜的工程,與外部對(duì)接非常多,甚至還有一些是風(fēng)險(xiǎn)控制的問(wèn)題,本地是不能啟動(dòng)直接調(diào)用的。也就是控制研發(fā)人員,不允許本地程序調(diào)用其他程序的接口。那么對(duì)于這樣的工程,研發(fā)的自測(cè)就要通過(guò)編寫(xiě) mock 方式進(jìn)行單元化測(cè)試。

不過(guò)這里會(huì)有一個(gè)問(wèn)題,單元化的測(cè)試,mock 的數(shù)據(jù)是不會(huì)隨著外部所有程序的調(diào)整動(dòng)態(tài)的變更的,而是隨著研發(fā)編寫(xiě)需求,一次寫(xiě)好后,后續(xù)如果這個(gè)功能沒(méi)有被調(diào)整,那么 mock 測(cè)試也不會(huì)在調(diào)整了。同時(shí)還因?yàn)?mock 覆蓋的場(chǎng)景不全,不知道引入的外部那么多接口都有哪些新增的邏輯。因而,你可能本地運(yùn)行沒(méi)問(wèn)題,但部署到測(cè)試環(huán)境,就會(huì)有一些不缺性的報(bào)錯(cuò)。

對(duì)于這里的報(bào)錯(cuò),當(dāng)你沒(méi)有 debug 手段的時(shí)候,就要把前后的報(bào)錯(cuò)數(shù)據(jù),都要復(fù)制到本地,通過(guò) mock 的方式驗(yàn)證程序邏輯,一點(diǎn)點(diǎn)排查。不過(guò),這個(gè)過(guò)程也要花費(fèi)好長(zhǎng)時(shí)間,尤其是一些復(fù)雜的邏輯與外部交互又非常多的時(shí)候,調(diào)試起來(lái)很耗費(fèi)時(shí)間。

所以,程序員??????對(duì)于實(shí)在難以調(diào)試的代碼,還有一種方式就是遠(yuǎn)程調(diào)試。把代碼部署到服務(wù)器,通過(guò)請(qǐng)求服務(wù)器的接口,本地的 IntelliJ IDEA 打開(kāi)的工程,就可以調(diào)試對(duì)應(yīng)的運(yùn)行數(shù)據(jù)??梢苑浅8咝У慕鉀Q bug!

接下來(lái),小傅哥就帶著大家做一個(gè)這樣的案例。如果你是一個(gè)新手小白,就更有必要學(xué)習(xí)一下這樣的手段了。

一、測(cè)試工程

這里小傅哥為你準(zhǔn)備好了一個(gè)測(cè)試工程,你可以直接下載驗(yàn)證。

圖片圖片

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

1. 測(cè)試接口

@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 里配置了應(yīng)用根目錄;server.servlet.context-path: /xfg
     */
    @RequestMapping(value = "group_buy_notify", method = RequestMethod.POST)
    public String groupBuyNotify(@RequestParam String requestDTO) {
        log.info("請(qǐng)求參數(shù) {}", JSON.toJSONString(requestDTO));

        return"success";
    }

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

2. Dockerfile

# 基礎(chǔ)鏡像
FROM openjdk:8-jre-slim

# 作者
MAINTAINER xiaofuge

# 配置
ENV PARAMS=""

# 時(shí)區(qū)
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 添加應(yīng)用
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,添加了一個(gè) $JAVA_REMOTE_DEBUG 的動(dòng)態(tài)入?yún)?,其?shí)這個(gè)位置要填入的就是 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005 但并不是上線的所有程序都要做這樣的事情,一般只有測(cè)試環(huán)境才需要。
  • EXPOSE 8091 5005 對(duì)外暴漏應(yīng)用程序所需的 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堆最大值(默認(rèn)值是物理內(nèi)存的1/4(<1GB))和初始java堆最小值(默認(rèn)值是物理內(nèi)存的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
  • 部署服務(wù)注意,要對(duì)外提供 5005、8091 兩個(gè)映射端口。對(duì)于這種端口的暴漏說(shuō)明,我已經(jīng)提供好了基礎(chǔ)教程,可以在這里擴(kuò)展學(xué)習(xí);https://bugstack.cn/md/road-map/docker-what.html
  • 另外在 environment 環(huán)境中,配置 - JAVA_REMOTE_DEBUG=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005 這樣就可以把遠(yuǎn)側(cè)調(diào)試的服務(wù)給啟動(dòng)起來(lái)了。相當(dāng)于你在自己的電腦的 IntelliJ IDEA 與服務(wù)器上的應(yīng)用,通過(guò) 5005 端口進(jìn)行通信完成測(cè)試debug驗(yàn)證。

二、部署程序

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

1. 打包程序

圖片圖片

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

2. 構(gòu)建鏡像

圖片圖片

  • mac 電腦可以點(diǎn)綠色箭頭。
  • windows 電腦,可以通過(guò) powershell 執(zhí)行 ./build.sh

3. 發(fā)布項(xiàng)目

圖片圖片

圖片圖片

  • mac 點(diǎn)擊綠色箭頭啟動(dòng)程序即可。
  • windows 打開(kāi) powershell 執(zhí)行腳本 docker-compose -f docker-compose-app.yml up -d

三、調(diào)試程序

1. IntelliJ IDEA 配置

圖片圖片

  • 首先,在運(yùn)行調(diào)試按鈕那,點(diǎn)擊下拉框。增加一個(gè)新的調(diào)試配置。
  • 之后,點(diǎn)擊+號(hào),添加 Remote JVM Debug
  • 最后,填寫(xiě) IP 地址和端口,點(diǎn)擊 Apply OK 即可。

2. 導(dǎo)入接口

圖片圖片

  • 導(dǎo)入接口到 ApiPost 中調(diào)用。其他的工具也可以,這樣接口可以保存起來(lái),方便以后調(diào)試。

3. 遠(yuǎn)程調(diào)試

3.1 啟動(dòng)程序

圖片圖片

  • 以新建的遠(yuǎn)程 debug 方式,啟動(dòng)程序。

3.2 添加斷點(diǎn)

圖片圖片

  • 添加斷點(diǎn)。注意,這會(huì)的程序部署的要一致,不能動(dòng)代碼。否則和遠(yuǎn)程部署的不一致,是不能調(diào)試的。

3.3 調(diào)用接口

圖片圖片

圖片圖片

首先,在 ApiPost 中點(diǎn)擊【發(fā)送】按鈕。 - 這會(huì),你可以在打了斷點(diǎn)的程序中,查看到請(qǐng)求的調(diào)用會(huì)進(jìn)來(lái)。最終執(zhí)行完,遠(yuǎn)程的部署的程序也會(huì)執(zhí)行完。

責(zé)任編輯:武曉燕 來(lái)源: buystack蟲(chóng)洞棧
相關(guān)推薦

2020-10-10 11:07:38

Java開(kāi)發(fā)代碼

2023-06-28 08:48:51

2020-05-25 15:40:23

IntelliJ IDEclipse強(qiáng)Java

2013-06-07 10:18:00

EclipseIntelliJ ID

2023-07-06 14:37:05

2009-12-21 16:36:08

ADO.Net數(shù)據(jù)庫(kù)

2023-10-11 16:12:07

2020-12-02 11:18:50

print調(diào)試代碼Python

2012-05-18 15:37:01

JavaIntelliJ

2020-12-04 10:05:00

Pythonprint代碼

2024-02-19 18:04:32

Git功能項(xiàng)目

2024-01-05 18:01:17

高并發(fā)策略程序

2022-02-09 15:02:01

ideadocker遠(yuǎn)程熱部署

2009-12-01 18:51:48

家庭路由器安裝

2009-12-03 16:50:58

Visual Basi

2023-11-05 19:46:56

JavaIntelliJ代碼

2023-12-13 08:17:24

JPDAJavaDebug

2012-02-02 15:14:29

Node.js

2021-08-05 18:34:55

IntelliJ ID高效

2023-11-13 18:01:15

開(kāi)發(fā)工具Java
點(diǎn)贊
收藏

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