新增:《使用 IntelliJ IDEA 进行远程程序调试》
This commit is contained in:
@@ -6,7 +6,7 @@ export const markdown: MarkdownOptions = {
|
|||||||
light: 'material-palenight',
|
light: 'material-palenight',
|
||||||
dark: 'one-dark-pro'
|
dark: 'one-dark-pro'
|
||||||
},
|
},
|
||||||
lineNumbers: true, // 启用行号
|
// lineNumbers: true, // 启用行号
|
||||||
|
|
||||||
// 在所有文档的<h1>标签后添加<ArticleMetadata/>组件
|
// 在所有文档的<h1>标签后添加<ArticleMetadata/>组件
|
||||||
config: (md) => {
|
config: (md) => {
|
||||||
|
@@ -1,47 +1,49 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const props = withDefaults(
|
defineProps<{
|
||||||
defineProps<{
|
text?: string
|
||||||
text?: string,
|
type?: 'info' | 'tip' | 'warning' | 'danger'
|
||||||
type?: 'warning' | 'tip' | 'error' | 'info'
|
}>()
|
||||||
vertical?: 'top' | 'middle'
|
|
||||||
}>(), {
|
|
||||||
text: '',
|
|
||||||
type: 'tip',
|
|
||||||
vertical: 'top',
|
|
||||||
}
|
|
||||||
);
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<span
|
<span class="VPBadge" :class="type ?? 'tip'">
|
||||||
class='VPBadge'
|
<slot>{{ text }}</slot>
|
||||||
:class="[ `VPBadge-type-${props.type}` ]"
|
|
||||||
:style="{ 'vertical-align': props.vertical }"
|
|
||||||
>
|
|
||||||
<slot>{{ props.text }}</slot>
|
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.VPBadge {
|
.VPBadge {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
font-size: 14px;
|
margin-left: 2px;
|
||||||
height: 18px;
|
border: 1px solid transparent;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 0 8px;
|
||||||
line-height: 18px;
|
line-height: 18px;
|
||||||
border-radius: 3px;
|
font-size: 13px;
|
||||||
padding: 0 6px;
|
font-weight: 600;
|
||||||
color: #fff;
|
transform: translateY(-2px);
|
||||||
}
|
}
|
||||||
.VPBadge.VPBadge-type-warning {
|
h2 .VPBadge {
|
||||||
background-color: var(--vp-c-badge-type-warning);
|
border-radius: 11px;
|
||||||
|
line-height: 20px;
|
||||||
}
|
}
|
||||||
.VPBadge.VPBadge-type-tip {
|
.VPBadge.info {
|
||||||
background-color: var(--vp-c-badge-type-tip);
|
border-color: var(--vp-badge-info-border);
|
||||||
|
color: var(--vp-badge-info-text);
|
||||||
|
background-color: var(--vp-badge-info-bg);
|
||||||
}
|
}
|
||||||
.VPBadge.VPBadge-type-error {
|
.VPBadge.tip {
|
||||||
background-color: var(--vp-c-badge-type-error);
|
border-color: var(--vp-badge-tip-border);
|
||||||
|
color: var(--vp-badge-tip-text);
|
||||||
|
background-color: var(--vp-badge-tip-bg);
|
||||||
}
|
}
|
||||||
.VPBadge.VPBadge-type-info {
|
.VPBadge.warning {
|
||||||
background-color: var(--vp-c-badge-type-info);
|
border-color: var(--vp-badge-warning-border);
|
||||||
|
color: var(--vp-badge-warning-text);
|
||||||
|
background-color: var(--vp-badge-warning-bg);
|
||||||
|
}
|
||||||
|
.VPBadge.danger {
|
||||||
|
border-color: var(--vp-badge-danger-border);
|
||||||
|
color: var(--vp-badge-danger-text);
|
||||||
|
background-color: var(--vp-badge-danger-bg);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
@@ -36,8 +36,33 @@
|
|||||||
* -------------------------------------------------------------------------- */
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--vp-c-badge-type-warning: #e7c000;
|
--vp-badge-info-border: var(--vp-c-divider-light);
|
||||||
--vp-c-badge-type-tip: #42b983;
|
--vp-badge-info-text: var(--vp-c-text-2);
|
||||||
--vp-c-badge-type-error: #da5961;
|
--vp-badge-info-bg: var(--vp-c-white-soft);
|
||||||
--vp-c-badge-type-info: #0170fe;
|
|
||||||
|
--vp-badge-tip-border: var(--vp-c-green-dimm-1);
|
||||||
|
--vp-badge-tip-text: var(--vp-c-green-darker);
|
||||||
|
--vp-badge-tip-bg: var(--vp-c-green-dimm-3);
|
||||||
|
|
||||||
|
--vp-badge-warning-border: var(--vp-c-yellow-dimm-1);
|
||||||
|
--vp-badge-warning-text: var(--vp-c-yellow-darker);
|
||||||
|
--vp-badge-warning-bg: var(--vp-c-yellow-dimm-3);
|
||||||
|
|
||||||
|
--vp-badge-danger-border: var(--vp-c-red-dimm-1);
|
||||||
|
--vp-badge-danger-text: var(--vp-c-red-darker);
|
||||||
|
--vp-badge-danger-bg: var(--vp-c-red-dimm-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark {
|
||||||
|
--vp-badge-info-border: var(--vp-c-divider-light);
|
||||||
|
--vp-badge-info-bg: var(--vp-c-black-mute);
|
||||||
|
|
||||||
|
--vp-badge-tip-border: var(--vp-c-green-dimm-2);
|
||||||
|
--vp-badge-tip-text: var(--vp-c-green-light);
|
||||||
|
|
||||||
|
--vp-badge-warning-border: var(--vp-c-yellow-dimm-2);
|
||||||
|
--vp-badge-warning-text: var(--vp-c-yellow-light);
|
||||||
|
|
||||||
|
--vp-badge-danger-border: var(--vp-c-red-dimm-2);
|
||||||
|
--vp-badge-danger-text: var(--vp-c-red-light);
|
||||||
}
|
}
|
@@ -458,7 +458,7 @@ cp 文件名/目录名 目录路径
|
|||||||
mv 文件名/目录名 目录路径
|
mv 文件名/目录名 目录路径
|
||||||
```
|
```
|
||||||
|
|
||||||
例如:
|
例如:`mv` 命令不需要 `-r` 命令,即可递归移动子目录
|
||||||
|
|
||||||
- `mv test test2`:
|
- `mv test test2`:
|
||||||
- 如果 test2 目录存在,表示将 test 目录移动到 test2 目录下
|
- 如果 test2 目录存在,表示将 test 目录移动到 test2 目录下
|
||||||
|
75
docs/categories/fragments/2022/11/01/使用IDEA进行远程程序调试.md
Normal file
75
docs/categories/fragments/2022/11/01/使用IDEA进行远程程序调试.md
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
---
|
||||||
|
title: 使用 IntelliJ IDEA 进行远程程序调试
|
||||||
|
author: 查尔斯
|
||||||
|
date: 2022/11/01 20:55
|
||||||
|
categories:
|
||||||
|
- 杂碎逆袭史
|
||||||
|
tags:
|
||||||
|
- IDE
|
||||||
|
- "IntelliJ IDEA"
|
||||||
|
- Java
|
||||||
|
---
|
||||||
|
|
||||||
|
# 使用 IntelliJ IDEA 进行远程程序调试
|
||||||
|
|
||||||
|
**C:** 今天在测试环境出现了一个 “匪夷所思” 的问题,追踪日志、排查 Feign 日志,修改配置,尝试了很多种办法,均未解决。最终决定对测试环境进行远程程序调试来看看。
|
||||||
|
|
||||||
|
在开发时用 IDE 的断点调试倒是相对便捷,但到了部署好的环境,再使用 IDE 来调试,就要麻烦一些了。下面就跟着笔者来看看使用 IntelliJ IDEA 实现远程 Debug 的步骤吧。
|
||||||
|
|
||||||
|
<!-- more-->
|
||||||
|
|
||||||
|
::: tip 笔者说
|
||||||
|
由于笔者安装了 [Chinese(Simplified)Language Pack / 中文语言包] 插件,所以下方步骤的 IntelliJ IDEA 界面都是中文的,各位同学如果用的是默认语言包,那就参照着看吧。
|
||||||
|
:::
|
||||||
|
|
||||||
|
## 新增远程调试配置
|
||||||
|
|
||||||
|
点开运行程序下拉菜单,点击 [编辑配置...]。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
在打开的 [运行/调试配置] 窗口,点击左上角 [+] 号,随后在弹出的 [添加新配置] 下拉菜单中,下拉找到 [远程 JVM 调试],点击即可添加远程调试配置。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
按照下图序号顺序,依次设置好 [名称]、[主机]、[端口]、[JDK 版本],然后先复制一下下图红框中的 [远程 JVM 的命令行实参],点击 [确定] 完成远程调试配置添加。
|
||||||
|
|
||||||
|
::: warning 笔者说
|
||||||
|
这里主要就注意一下主机和端口两个配置、主机是你要远程调试的程序所在服务器的 IP/域名,但端口可不是你要远程调试的程序所占用的端口。这个端口是远程调试端口,也不能和程序端口相同。
|
||||||
|
:::
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 修改启动命令
|
||||||
|
|
||||||
|
添加完配置之后,就立刻能开始调试吗?当然不是了,很简单的问题,如果我们只需要在 IntelliJ IDEA 中配置两下就能直接连接程序调试,那 Java 程序的安全性也太低了吧。
|
||||||
|
|
||||||
|
刚才笔者让你复制的 [远程 JVM 的命令行实参],是 IntelliJ IDEA 基于我们刚才的配置帮我们生成的,我们需要将这个 JVM 命令行参数加到你要远程调试的程序启动命令中。
|
||||||
|
|
||||||
|
例如:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
|
||||||
|
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 你的程序名.jar --spring.profiles.active=test
|
||||||
|
```
|
||||||
|
|
||||||
|
好了,还差最后一步,把你配置的远程调试端口放开。
|
||||||
|
|
||||||
|
## 启动远程调试
|
||||||
|
|
||||||
|
回到 IDE 中,点击 [Debug 运行] 按钮,如果控制台窗口出现下方提示,那么接下来该怎么加断点,该怎么触发断点,该怎么进行调试就不用笔者过多介绍了吧?
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# Connected to the target VM, address: ''xxx:5005', transport: 'socket''
|
||||||
|
已连接到目标 VM,地址:''xxx:5005', 传输: '套接字''
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
远程调试完后别忘了把远程调试端口关闭,该删除安全组规则就删除。
|
||||||
|
|
||||||
|
::: tip 笔者说
|
||||||
|
哦对了,笔者这问题到底解决了没有呢?当然解决了,而且这个问题不是代码的问题,而是一位远程办公的同事在他本地连接了测试环境数据库(这在笔者项目开发时强调过不允许连接),他的程序一直运行着把测试环境的一些任务数据处理了。
|
||||||
|
|
||||||
|
具体的不多说,因为当你调试时程序运行正常,断开调试再试就出错,而且在你没调试前添加的部分日志埋点也没输出时,其实就应该摒弃所谓的 “不可能”,即:程序没有在你预想的机器上运行。毕竟福尔摩斯有句话:“排除一切不可能的,剩下的即使再不可能,那也是真相”。
|
||||||
|
:::
|
BIN
docs/public/img/2022/11/01/202211012021157.png
Normal file
BIN
docs/public/img/2022/11/01/202211012021157.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 83 KiB |
BIN
docs/public/img/2022/11/01/202211012022122.png
Normal file
BIN
docs/public/img/2022/11/01/202211012022122.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 85 KiB |
BIN
docs/public/img/2022/11/01/202211012022222.png
Normal file
BIN
docs/public/img/2022/11/01/202211012022222.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 65 KiB |
BIN
docs/public/img/2022/11/01/202211012025211.png
Normal file
BIN
docs/public/img/2022/11/01/202211012025211.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 92 KiB |
Reference in New Issue
Block a user