远程调试的正确姿势

本文介绍了如何正确开启远程调试,包括Tomcat和SpringBoot工程的参数配置,并讲解了IDEA中远程连接的设置步骤及断点的正确使用,强调了在远程调试过程中需要注意的事项,以避免影响他人和系统服务。

目前测试环境开启了远程调试,但是很多小伙伴不清楚远程调试的正确姿势,容易影响其他人对于测试环境的使用,更严重的可能会导致服务不可用。这里讲一下我们了解到的远程调试正确姿势,供小伙伴们参考。

一、远程调试的开启
1)Tomcat工程是在tomcat所在目录下的bin/startup.bat中,加入

SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

2)springBoot工程在启动时加上同样的参数

java -server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -jar ***.jar

具体的参数含义:

-server是通知JVM工作在服务器模式下

-Xdebug是通知JVM工作在DEBUG模式下

-Xnoagent禁用默认sun.tools.debug调试器

-Djava.compiler=NONE禁止 JIT 编译器的加载

-Xrunjdwp加载JDWP的JPDA参考执行实例(JDWP是java调试传输协议,即调试器与目标java程序之间的传输协议。JVM自带对这个协议的支持。)

transport用于在调试程序和 VM 使用的进程之间通讯

dt_socket套接字传输

server=y/n JVM 是否需要作为调试服务器执行

suspend=y/n是否在调试客户端建立连接之后启动 JVM(如果排查远程服务启动不成功的问题,可以尝试设置为y,这样工程启动时就会连接到本地)

address调试服务器的端口号,客户端用来连接服务器的端口号

二、IDEA调试器的

<think>好的,用户之前已经问过关于调试器的使用方法,现在他提出了更深入的问题,要求更详细地解释调试的概念、适用范围、同软件中的具体使用方法以及重要概念。我需要确保回答既全面又适合新手,同时结构清晰,避免使用专业术语过多。 首先,用户希望了解“调试”是什么,需要从基本定义入手,用比喻帮助理解。接下来,用户提到调试能用在什么文件上,是否所有代码类型都可以调试,这里需要区分同编程语言和文件类型,说明调试的通用性和个别情况。 然后,用户询问在同软件中的具体使用方法,可能需要列举常见IDE如VS Code、PyCharm、浏览器开发者工具等,给出具体步骤,但要注意要过于繁琐,保持简洁。最后,需要系统讲解重要概念,比如断点、单步执行、调用堆栈等,确保用户能理解这些核心要素。 用户是新手,可能需要避免过于技术性的解释,多用类比和实际例子。同时,用户可能对调试的整体流程和在同环境中的操作太清楚,需要分步骤说明,并强调调试的通用性,即使在同软件中,基本概念是相通的。需要检查之前回答是否已经覆盖了部分内容,避免重复,同时补充更详细的信息。</think>明白!作为新手,你需要的是**系统性认知地图**而是零散技巧。我们先从「调试的本质」开始,像拼乐高一样逐步组装知识体系。以下是分段讲解: --- ### 一、调试的本质:给代码做「全身体检」 **定义**:调试Debugging)是**像侦探破案一样**,通过观察程序运行时的内部状态(变量值、执行路径等),定位并修复代码错误的过程。 **生活比喻**: - 普通运行程序 → 直接喝煲好的汤(只看结果) - 调试模式 → 拿着勺子边煮边尝,随时调整火候和调料(观察中间过程) --- ### 二、调试的适用范围:只是代码文件 #### 1. **可调试的文件类型** | 文件类型 | 示例 | 调试特点 | |------------------|-----------------------|------------------------------| | 源代码文件 | `.py`, `.js`, `.java` | 直接下断点,查看变量 | | 编译后的中间文件 | `.class` (Java) | 需保留调试符号(需编译时带`-g`参数) | | 脚本文件 | `.sh`, `.bat` | 需配合调试工具(如`bash -x`) | | 配置文件 | `.json`, `.yaml` | 间接调试(通过程序读取时的报错) | #### 2. **可直接调试的类型** - 纯文本文件(`.txt`) - 已加密/混淆的代码 - 没有调试信息的编译文件(如发布版`.exe`) #### 3. 跨语言通用性 - **解释型语言**(Python/JS):天生适合调试,无需额外配置 - **编译型语言**(C++/Go):需编译时保留调试信息 - **标记语言**(HTML/CSS):通过浏览器开发者工具间接调试 --- ### 三、同软件的调试实战(新手友好版) #### 🔧 **Visual Studio Code(万能型)** 1. **创建`.vscode/launch.json`**(自动生成) 2. **基础操作**: - 设置断点:点击行号左侧(红点) - 启动调试:`F5` - 单步执行:`F10`(跳过函数)/`F11`(进入函数) 3. **特色功能**: - 条件断点:右键断点→输入条件(如`x > 100`) - 日志断点:断点处自动打印变量值而暂停 #### 🐍 **PyCharm(Python专属)** 1. **无需配置**:直接打开`.py`文件 2. **调试技巧**: - 在控制台输入表达式实时计算(调试时可用) - 右键变量→`Evaluate Expression` 强制修改值 3. **科学模式**:支持可视化查看Numpy数组内容 #### 🌐 **浏览器开发者工具(前端必备)** 1. 打开方式:`F12` → Sources标签 2. **关键功能**: - DOM断点:监控元素属性变化 - 事件监听器断点:在点击事件触发时暂停 - 网络请求断点:拦截特定API请求 3. **Console黑科技**: - 输入`debugger;`语句强制暂停(无需手动设断点) #### ☕ **Eclipse(Java老将)** 1. **远程调试**(企业级用法): ```bash java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 MyApp ``` 2. **热替换**:调试时直接修改代码→立即生效(需开启HotSwap) --- ### 四、调试核心概念系统解析(新手升级包) #### 1. **断点(Breakpoint)** - **类型**: - 行断点(基础) - 条件断点(满足条件才暂停) - 异常断点(抛出特定异常时暂停) - **底层原理**:CPU在指定内存地址插入`int 3`指令触发中断 #### 2. **调用栈(Call Stack)** - **作用**:显示函数调用链(A→B→C) - **实战意义**: - 定位递归深度 - 追踪异常传播路径 #### 3. **作用域链(Scope Chain)** - **查看层次**: 1. Local(当前函数内的变量) 2. Closure(闭包变量) 3. Global(全局变量) #### 4. **观察窗口(Watch)** - **高级用法**: - 输入表达式:`users[0].name` - 监控对象属性变化:`$_.age`(`$_`表示最后访问的对象) #### 5. **线程调试(多线程专用)** - **操作**: - 冻结/恢复指定线程 - 查看线程竞争状态(死锁检测) --- ### 五、调试思维培养:新手避坑指南 #### 🚫 **常见误区** 1. **盲目猜测** → 应通过断点**实证验证** 2. **全量调试** → 先用`二分法`缩小范围 3. **忽视日志** → 调试与日志结合使用 #### ✅ **正确姿势** 1. **最小化复现**:剥离无关代码,构造最简测试案例 2. **假设驱动**: - 假设问题出在模块A → 在A的入口/出口设断点 - 验证假设 → 修正假设 → 循环推进 3. **防御性调试**: - 在关键数据流经处预设断言(`assert`语句) - 即使本次用到,也为日后维护留钩子 --- ### 六、调试能力成长路线图 1. **新手村**(0-3月): - 掌握单步执行、变量查看 - 能修复显性错误(空指针、越界等) 2. **进阶区**(3-12月): - 使用条件断点、异步调试 - 解决隐蔽bug(竞态条件、内存泄漏) 3. **高手营**(1年+): - 远程调试分布式系统 - 通过反汇编调试底层问题 --- ### 🌰 经典案例:调试「计数器准」 ```python count = 0 def add(): global count count += 1 for _ in range(1000): add() print(count) # 有时输出999? ``` **调试步骤**: 1. 在`count +=1`行设断点 2. 启动多线程调试(模拟并发场景) 3. 发现多个线程同时读取旧值 → 定位到**线程竞争问题** 4. 解决方案:加锁或使用原子操作 --- 最后送一句调试箴言:**「要相信print,要亲手解剖你的代码」** 🔍 调试就像学游泳——看再多的教程,如现在打开编辑器,按下那个`F5`!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值