跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言Node.jsAIjava

错误定位 Prompt 设计:利用 AI 快速解析异常堆栈

异常堆栈是定位程序错误的核心线索,但面对复杂系统时信息过载常导致排查效率低下。本文通过设计专用 Prompt,引导大模型自动解析堆栈、推测根因并生成排查步骤。涵盖基础与进阶模板,适配 Java、Python、JavaScript 等多语言及微服务场景,结合约束输出与示例引导技巧,帮助开发者将 AI 转化为高效调试助手,显著缩短故障定位时间。

蜜桃汽水发布于 2026/4/8更新于 2026/10/2599 浏览
错误定位 Prompt 设计:利用 AI 快速解析异常堆栈

错误定位 Prompt 设计:利用 AI 快速解析异常堆栈

在软件开发流程中,错误定位是开发者日常工作的核心环节之一,也是消耗时间与精力的关键痛点。当程序抛出异常时,开发者往往需要面对冗长的堆栈信息、零散的日志片段,甚至在复杂系统(如微服务架构、分布式应用)中,错误根因可能横跨多个服务、涉及不同层级的代码调用,导致定位效率低下。

传统错误定位依赖开发者的经验:手动梳理堆栈层级、检索相关代码文件、排查输入输出数据,整个过程不仅对新手不友好,即使是资深开发者,面对陌生项目或复杂异常时也容易陷入'试错式排查'的困境。而错误定位 Prompt 则能通过精准的指令设计,引导大语言模型(LLM)像'虚拟调试助手'一样,自动解析堆栈信息、识别关键错误线索、关联代码逻辑,并输出结构化的定位建议,大幅缩短排查周期。

例如,当开发者仅粘贴一段 Java 空指针异常的堆栈日志时,普通提问可能仅得到'检查对象是否初始化'的泛泛建议;而经过优化的错误定位 Prompt 能进一步要求模型:标注堆栈中的关键调用层级、推测可能引发空指针的代码场景、给出具体的排查步骤,甚至生成调试代码片段。

本章将从错误定位的核心痛点出发,系统讲解错误定位 Prompt 的设计逻辑、不同场景下的模板构建、模型输出优化技巧,并结合多语言(Java、Python、JavaScript)、多架构(单体应用、微服务)的实战案例,帮助读者掌握'用 Prompt 高效定位错误'的能力。

核心概念:错误定位与异常堆栈的基础认知

在设计 Prompt 前,需先明确错误定位的核心要素——异常堆栈的结构与关键信息,这是 Prompt 指令能精准引导模型的前提。

什么是异常堆栈?

异常堆栈(Exception Stack Trace)是程序抛出异常时,运行时环境(如 JVM、Python 解释器、Node.js 引擎)生成的'调用轨迹记录',它包含了异常类型、错误消息、代码调用链路三大核心信息,是定位错误的'原始证据'。

以 Python 的 IndexError 为例,一段典型的异常堆栈如下:

Traceback (most recent call last):
  File "user_manage.py", line 25, in get_user_info
    return users[index] # 第 25 行:尝试访问列表越界的索引
  File "main.py", line 18, in <module>
    user = get_user_info(5) # 第 18 行:调用 get_user_info 函数,传入 index=5
IndexError: list index out of range # 异常类型:列表索引越界

从堆栈中可提取的关键信息:

  • 异常类型:IndexError(明确错误类别,如空指针、索引越界、语法错误等);
  • 错误消息:list index out of range(描述错误具体原因);
  • 调用链路:从顶层调用(main.py 第 18 行)到错误发生点(user_manage.py 第 25 行)的完整代码路径;
  • 错误位置:精确到文件、行号(便于直接跳转代码)。

错误定位的核心痛点(Prompt 需解决的问题)

开发者在手动定位错误时,常面临以下问题,而这些正是 Prompt 设计需针对性解决的目标:

痛点类型
具体表现
Prompt 解决思路
信息过载复杂系统的堆栈日志长达数百行,包含大量无关调用(如框架底层代码),难以筛选关键信息指令中明确要求'过滤框架无关调用,仅保留业务代码层级''标注堆栈中的核心错误行'
经验依赖新手难以识别异常类型与代码逻辑的关联(如"SQLSyntaxError"可能是字段名拼写错误,也可能是语法格式问题)Prompt 中嵌入'异常类型映射表',引导模型根据异常类型输出常见根因(如:SQLSyntaxError → 1. 字段名错误;2. 关键字拼写错误;3. 括号不匹配)
场景缺失堆栈仅包含代码调用,缺乏上下文(如输入数据、配置参数、数据库状态),导致模型无法判断根因指令中要求开发者补充'输入数据示例''相关配置片段',并引导模型结合上下文分析
跨服务复杂微服务架构中,错误可能源于上游服务的参数传递(如网关转发的参数格式错误),但堆栈仅显示当前服务的调用Prompt 设计'跨服务调用链路补充'模块,要求模型输出'可能的上游依赖排查点'

错误定位 Prompt 的核心目标

一个高质量的错误定位 Prompt,需实现以下 3 个核心目标,确保模型输出具备实用性、精准性、可操作性:

  1. 信息提取:从混乱的堆栈日志中,自动提取异常类型、错误位置、关键调用链路;
  2. 根因推测:结合代码上下文(如函数功能、输入数据),推测 2-3 个最可能的错误根因(避免泛泛而谈);
  3. 行动指南:给出 step-by-step 的排查步骤,甚至生成调试代码片段(如打印关键变量、添加日志)。

错误定位 Prompt 的设计框架:从基础到进阶

错误定位 Prompt 的设计需遵循'信息引导 + 约束输出 + 场景补充'的逻辑,根据开发者的经验水平(新手/资深)、错误场景(单体/微服务),分为'基础模板'和'进阶模板'两类。

基础模板:面向新手,覆盖单一语言/单体应用

基础模板适用于单体应用、单一语言(如 Python/Java)、无复杂上下文的错误场景,核心是'降低输入门槛'——开发者只需粘贴堆栈日志,模型即可输出结构化的定位建议。

基础模板结构(通用版)
# 角色与任务
你是一位资深软件开发调试助手,擅长 [指定语言,如 Python/Java/JavaScript] 的错误定位。请基于我提供的异常堆栈日志,完成以下任务:

# 输入信息
异常堆栈日志:
[此处粘贴完整的异常堆栈日志]

# 输出要求(严格按以下结构输出,不要遗漏)
1. 异常核心信息提取:
   - 异常类型:[如 IndexError/NullPointerException]
   - 错误消息:[复制堆栈中的错误描述]
   - 错误位置:文件路径:[如 user_manage.py],行号:[如 25]
   - 关键调用链路(仅保留业务代码,过滤框架底层代码):[按'文件行号→函数名'格式列出]
2. 可能的错误根因(列出 2-3 个最可能的原因,结合代码逻辑推测):
   - 根因 1:...
   - 根因 2:...
   - 根因 3:...
3. 排查步骤(step-by-step,从简单到复杂):
   Step 1:...
   Step 2:...
   Step 3:...
4. 调试代码片段(可选,若适用):
   [生成可直接插入的调试代码]
基础模板实战案例(Python 索引越界错误)

开发者输入(堆栈日志):

Traceback (most recent call last):
  File "user_manage.py", line 25, in get_user_info
    return users[index]
  File "main.py", line 18, in <module>
    user = get_user_info(5)
IndexError: list index out of range

模型输出(基于基础模板):

  1. 异常核心信息提取:
    • 异常类型:IndexError(列表索引越界)
    • 错误消息:list index out of range
    • 错误位置:文件路径:user_manage.py,行号:25
    • 关键调用链路:main.py 第 18 行→get_user_info → user_manage.py 第 25 行→return users[index]
  2. 可能的错误根因:
    • 根因 1:传入的 index=5 超过列表 users 的实际长度(推测 users 列表长度≤4),导致索引越界。
    • 根因 2:函数 get_user_info 未对输入参数 index 进行合法性校验(如未判断 index 是否在 [0, len(users)-1] 范围内)。
    • 根因 3:列表 users 在初始化时未成功加载数据(如从数据库查询用户失败,返回空列表)。
  3. 排查步骤:
    • Step 1:打开 user_manage.py 文件,定位第 25 行,查看 users 列表的定义位置,打印 len(users) 确认列表实际长度。
    • Step 2:跳转至 main.py 第 18 行,检查调用 get_user_info 时传入的 index=5 是否合理。
    • Step 3:在 get_user_info 函数开头添加调试日志,重新运行程序验证根因。
  4. 调试代码片段:
# 优化后的 get_user_info 函数(添加参数校验与调试日志)
def get_user_info(index):
    # 调试日志:打印关键变量
    print(f"调试信息 - index: {index}, users 长度:{len(users)}, users: {users}")
    # 参数合法性校验
    if not isinstance(index, int):
        raise TypeError("index 必须为整数")
    if index < 0 or index >= len(users):
        raise ValueError(f"index 超出有效范围,当前 users 列表长度为{len(users)},有效 index 范围:0~{len(users)-1}")
    return users[index]

进阶模板:面向资深开发者,覆盖跨服务/复杂场景

进阶模板适用于微服务、分布式应用、多语言混合架构的复杂错误场景,核心是'补充上下文信息'——要求开发者提供更多维度的输入(如调用链路、配置参数、输入数据),引导模型进行'关联分析',定位跨服务或非代码层面的根因(如配置错误、数据库连接失败)。

进阶模板结构(微服务版)
# 角色与任务
你是一位微服务架构调试专家,擅长分析跨服务调用中的错误根因,熟悉 [指定技术栈,如 Spring Cloud/Dubbo + MySQL + Redis]。请基于我提供的'异常堆栈 + 调用链路 + 上下文信息',完成深度错误定位。

# 输入信息(请开发者按以下格式补充,缺一不可)
1. 异常堆栈日志(当前服务的完整堆栈):
[此处粘贴当前服务的异常堆栈]
2. 跨服务调用链路(如 APM 工具记录的链路,格式:调用方服务→被调用方服务→接口名):
[如:用户服务(user-service)→ 订单服务(order-service)→ /api/order/create(POST)]
3. 上下文补充:
   - 输入数据(当前接口的请求参数,脱敏处理):[如:{"userId": "12345", "quantity": -1}]
   - 相关配置(如数据库连接、Redis 地址):[如:MySQL 地址:jdbc:mysql://...]
   - 异常发生时间与频率:[如:2024-05-20 14:30 首次发生]

# 输出要求(严格按以下结构,需包含跨服务排查点)
1. 异常核心信息提取(含跨服务关联):
   - 异常类型与错误消息:...
   - 错误位置(当前服务):文件:[...],行号:[...],方法:[...]
   - 跨服务调用链路梳理:[按'服务→接口→参数传递'格式]
2. 多维度根因分析(分'代码层''配置层''依赖层'):
   - 代码层根因:...
   - 配置层根因(可选):...
   - 依赖层根因(可选):...
3. 跨服务排查步骤(按'当前服务→上游服务→依赖服务'顺序):
   Step 1:排查当前服务...
   Step 2:排查上游服务...
   Step 3:排查依赖服务...
4. 解决方案与优化建议(含跨服务协同):
   - 短期修复:...
   - 长期优化:...
进阶模板实战案例(微服务订单创建错误)

开发者输入(完整上下文):

  1. 异常堆栈日志(order-service):
org.springframework.dao.DataIntegrityViolationException: ### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Check constraint 'order_quantity_check' violated for table 'order'
...
at com.order.service.impl.OrderServiceImpl.createOrder(OrderServiceImpl.java:65)
...
at com.order.controller.OrderController.createOrder(OrderController.java:48)
  1. 跨服务调用链路:user-service → order-service → /api/order/create
  2. 上下文补充:
    • 输入数据:{"userId": "12345", "quantity": -2}
    • 相关配置:MySQL 地址:jdbc:mysql://192.168.1.100:3306/order_db;order 表的 quantity 字段约束:quantity INT NOT NULL CHECK (quantity > 0)

模型输出(基于进阶模板):

  1. 异常核心信息提取:
    • 异常类型:DataIntegrityViolationException,根因:MySQL 的 order_quantity_check 约束被违反(quantity 字段需>0)。
    • 错误位置:OrderServiceImpl.java 第 65 行,OrderController.java 第 48 行。
    • 跨服务调用链路:user-service→order-service(传递参数 quantity=-2)→ MySQL 执行 INSERT 语句时触发 CHECK 约束。
  2. 多维度根因分析:
    • 代码层根因:order-service 的 Controller 和 Service 均未对 quantity 参数进行合法性校验(未判断 quantity>0);user-service 在调用前也未拦截非法参数。
    • 配置层根因:MySQL 虽设置了 CHECK 约束,但未在应用层提前拦截,导致异常需通过数据库层抛出。
    • 依赖层根因:前端页面可能未添加 quantity 的输入校验,或校验被绕过。
  3. 跨服务排查步骤:
    • Step 1:排查当前服务(order-service):检查 OrderController.java 是否使用 JSR-380 校验注解(如@Min(1))。
    • Step 2:排查上游服务(user-service):找到 Feign 客户端代码,查看是否有参数校验逻辑。
    • Step 3:排查依赖服务(MySQL):登录数据库查看 quantity 字段的约束及历史数据。
  4. 解决方案与优化建议:
    • 短期修复:在 order-service 的 createOrder 方法添加 @Min(value = 1) 注解;在 user-service 的 Feign 调用前添加参数校验。
    • 长期优化:引入公共校验组件;数据库层强化约束提示;接入 APM 工具设置告警规则。

不同语言/场景的错误定位 Prompt 适配技巧

不同编程语言的异常堆栈格式、错误类型命名存在差异,不同场景(如前端 JS 错误、后端数据库错误)的排查重点也不同。需根据具体场景调整 Prompt 的'语言特性'与'输出侧重点'。

多语言适配:Java、Python、JavaScript 差异调整

1. Java 场景:突出'异常链'与'框架层级过滤'

Java 堆栈常包含大量框架代码(如 Spring、MyBatis),Prompt 需明确'过滤框架无关调用',同时关注'异常链'(如 DataIntegrityViolationException 的根因是 MysqlDataTruncation)。

Java 专属 Prompt 片段:

# 语言特性适配
- 请识别异常链中的'根异常'(如被 cause 包裹的 MysqlDataTruncation),优先基于根异常分析根因;
- 过滤框架底层代码调用(如 org.springframework.*、org.mybatis.*),仅保留业务代码;
- 若涉及 Spring Boot 框架,请额外分析是否为'配置错误'或'依赖冲突'。
2. Python 场景:关注'模块导入'与'第三方库错误'

Python 错误常涉及模块导入(如 ModuleNotFoundError)、第三方库使用(如 pandas 的 KeyError),Prompt 需引导模型分析'依赖安装'与'库版本兼容性'。

Python 专属 Prompt 片段:

# 语言特性适配
- 若异常类型为 ModuleNotFoundError,请优先分析'是否已安装该模块'及'Python 环境是否正确';
- 若涉及第三方库,请推测是否为'库版本不兼容',并建议查看库的官方文档;
- 若为装饰器、生成器相关错误,请结合 Python 语法特性分析。
3. JavaScript(前端/Node.js)场景:区分'语法错误'与'运行时错误'

JS 错误分为语法错误和运行时错误,前端场景还需关注'DOM 操作''异步请求'。

JavaScript 专属 Prompt 片段:

# 语言特性适配(区分前端/Node.js)
- 若为前端场景:
  1. 若涉及 DOM 操作,请分析'DOM 元素是否存在';
  2. 若为异步请求错误,请分析'请求 URL 是否正确''跨域配置是否缺失'。
- 若为 Node.js 场景:
  1. 若涉及文件操作,请分析'文件路径是否正确'、'文件权限是否足够';
  2. 若为 EventEmitter 相关错误,请建议添加 error 事件监听。

特殊场景适配:数据库错误、分布式链路错误

1. 数据库错误场景

数据库错误的根因常涉及'SQL 语法''字段约束''连接配置',Prompt 需引导模型分析 SQL 语句与数据库配置的匹配性。

数据库错误专属 Prompt 片段:

# 数据库场景适配
- 若为 SQL 语法错误:检查关键字拼写、括号/引号配对、表名/字段名大小写;
- 若为连接错误:检查数据库连接地址、端口、用户名、密码是否正确;分析网络是否可达;
- 若为 NoSQL 数据库:检查查询条件是否符合语法,集合是否存在。
2. 分布式链路错误场景

分布式错误的根因常涉及'服务间通信''分布式事务一致性''服务可用性'。

分布式链路专属 Prompt 片段:

# 分布式场景适配
- 请结合 APM 调用链路分析:
  1. 上游服务是否正常返回(如是否存在超时);
  2. 服务间通信协议是否存在问题(如序列化方式不兼容);
  3. 分布式事务是否触发回滚。
- 若涉及消息队列:分析'消息是否成功发送''消费者是否正常消费'。

错误定位 Prompt 的输出优化:避免泛泛而谈,提升实用性

即使使用上述模板,模型仍可能输出'泛泛而谈'的建议。需通过'约束输出细节''添加负面清单''示例引导'三个技巧,提升输出的精准性与可操作性。

技巧 1:约束输出细节

在 Prompt 的输出要求中,明确'禁止模糊表述',强制模型结合输入的堆栈信息,输出具体的文件路径、行号,甚至推测可能的代码片段。

反例(泛泛而谈): '请检查 quantity 参数的校验逻辑,确保其为正数。'

正例(具体细节): '请检查 order-service 的 OrderController.java 第 48 行,确认是否在 createOrder 方法的 quantity 参数上添加了@Min(1) 注解;若未添加,请补充该注解,并在全局异常处理器中捕获 MethodArgumentNotValidException。'

Prompt 约束语句:

# 输出细节约束
- 所有排查步骤必须'具体到文件路径、行号、方法名',禁止使用'某个文件''某段代码'等模糊表述;
- 根因分析需结合输入的'异常堆栈 + 上下文信息',禁止输出与当前场景无关的通用建议;
- 调试代码片段需可直接运行,并标注'需替换的变量'。

技巧 2:添加负面清单

提前在 Prompt 中列出'禁止输出的内容',避免模型输出无用信息,聚焦错误定位本身。

负面清单示例:

# 输出负面清单(禁止包含以下内容)
1. 禁止讲解基础编程语言语法(如'Java 的 try-catch 语句用法');
2. 禁止输出与当前错误无关的通用开发规范(如'代码缩进应使用 4 个空格');
3. 禁止使用过于学术化的表述,需用通俗语言解释,并直接关联解决方案;
4. 禁止推荐未经验证的工具或框架。

技巧 3:示例引导

若模型对复杂场景的输出仍不理想,可在 Prompt 中添加'正确输出示例',让模型参考示例的结构与细节程度。

示例引导片段(Java 空指针错误):

# 正确输出示例参考
假设输入堆栈为:java.lang.NullPointerException: Cannot invoke "com.user.entity.User.getName()" because "user" is null
at com.user.service.UserServiceImpl.getUserName(UserServiceImpl.java:32)

正确输出参考(根因分析部分):
- 根因 1:UserServiceImpl.java 第 32 行调用 user.getName() 时,user 对象为 null,推测'获取 user 对象的逻辑存在漏洞';
- 根因 2:UserController.java 第 20 行调用 UserServiceImpl.getUserName 时,传入的 user 对象为 null。

请参考上述示例的细节程度,分析当前问题的根因。

章节总结与课后练习

章节总结

本章系统讲解了错误定位 Prompt 的设计与应用,核心要点可归纳为:

  1. 基础认知:异常堆栈是错误定位的核心证据,需提取'异常类型、错误位置、调用链路'三大信息;
  2. 模板设计:基础模板面向单体应用/新手,侧重'结构化输出';进阶模板面向微服务/资深开发者,侧重'跨服务关联分析';
  3. 场景适配:根据语言(Java/Python/JS)、场景(数据库/分布式)调整 Prompt 的'语言特性'与'排查重点';
  4. 输出优化:通过'约束细节、负面清单、示例引导',避免模型输出泛泛而谈,提升建议的可操作性。

掌握错误定位 Prompt 的设计技巧,能让开发者将大语言模型转化为'专属调试助手',大幅减少排查错误的时间,尤其在面对陌生项目或复杂架构时,效果更为显著。

课后练习

练习 1:Python 字典键不存在错误(基础场景)

任务:基于以下异常堆栈,使用'基础模板'设计 Prompt,并生成模型输出(需包含异常提取、根因分析、排查步骤、调试代码)。

输入堆栈日志:

Traceback (most recent call last):
  File "product_manage.py", line 38, in get_product_price
    return product["price"] # 尝试获取字典中不存在的"price"键
  File "main.py", line 22, in <module>
    price = get_product_price({"id": "P001", "name": "手机"})
KeyError: 'price'
练习 2:Java 微服务数据库连接错误(进阶场景)

任务:基于以下上下文信息,使用'进阶模板'设计 Prompt,并生成模型输出(需包含跨服务排查、多维度根因分析)。

输入信息:

  1. 异常堆栈日志(product-service):
org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
...
at com.product.service.impl.ProductServiceImpl.getProductById(ProductServiceImpl.java:42)
  1. 跨服务调用链路:api-gateway → product-service → /api/product/getById
  2. 上下文补充:
    • 输入数据:请求 URL:http://localhost:8080/api/product/getById?id=P001
    • 相关配置:product-service 的 application.yml 中数据库配置:spring.datasource.url: jdbc:mysql://192.168.1.200:3306/product_db?useSSL=false
    • 异常发生情况:所有调用 product-service 的请求均触发该错误,重启服务后仍无法解决;其他服务(如 user-service)可正常连接 MySQL(地址:192.168.1.100:3306)。
练习 3:前端 JavaScript 异步请求错误(场景适配)

任务:基于以下前端错误信息,设计'JavaScript 前端专属 Prompt',并生成模型输出(需包含 DOM 操作、异步请求排查)。

输入信息:

  1. 浏览器控制台错误:
Uncaught (in promise) AxiosError: Request failed with status code 404
at settle (axios.min.js:1:14975)
at getProductDetail (productDetail.js:15)
  1. 上下文补充:
    • 操作步骤:用户在 productDetail.html 页面点击'查看商品详情'按钮,触发 onclick 事件调用 getProductDetail 函数;
    • 后端服务信息:后端商品服务的正确接口地址为 /api/product/getDetail(非 /api/product/detail),服务已启动,端口 8080。

相关代码(productDetail.js 第 15 行):

async function getProductDetail(){
    const productId = document.getElementById("productId").value;
    const response = await axios.get("/api/product/detail", {
        params: { id: productId }
    }); // 第 15 行
    console.log(response.data);
}

练习参考答案(思路点拨)

练习 1 参考答案思路
  1. 异常核心信息提取:
    • 异常类型:KeyError(字典键不存在);
    • 错误位置:product_manage.py 第 38 行,get_product_price 函数;
    • 关键调用链路:main.py 第 22 行→get_product_price → product_manage.py 第 38 行→return product["price"]。
  2. 根因分析:
    • 根因 1:传入的 product 字典仅包含"id"和"name"键,无"price"键,导致获取时抛出 KeyError;
    • 根因 2:get_product_price 函数未判断"price"键是否存在,直接访问键。
  3. 排查步骤:
    • Step 1:检查 main.py 第 22 行,确认传入的 product 字典是否应包含"price"键;
    • Step 2:在 product_manage.py 第 38 行前添加键存在性判断。
  4. 调试代码:
def get_product_price(product):
    if not isinstance(product, dict):
        raise TypeError("product 必须为字典类型")
    if "price" not in product:
        raise KeyError(f"product 字典缺少'price'键,当前键列表:{list(product.keys())}")
    return product["price"]
练习 2 参考答案思路
  1. 异常核心信息提取:
    • 异常类型:CannotGetJdbcConnectionException,根因:CommunicationsException(通信链路失败);
    • 跨服务链路:api-gateway→product-service:/api/product/getById→ product-service 连接 MySQL(192.168.1.200:3306)失败。
  2. 多维度根因分析:
    • 配置层根因:product-service 的 MySQL 地址配置错误(192.168.1.200:3306),而其他服务使用 192.168.1.100:3306 可正常连接,推测地址写错;
    • 依赖层根因:192.168.1.200 的 MySQL 未启动、端口被占用,或网络防火墙禁止 product-service 访问该地址。
  3. 排查步骤:
    • Step 1:检查 product-service 的 application.yml,确认 MySQL 地址是否应为 192.168.1.100:3306;
    • Step 2:在 product-service 服务器上执行 ping 和 telnet 测试网络连通性;
    • Step 3:登录 192.168.1.200 服务器,确认 MySQL 是否启动。
  4. 解决方案:
    • 修改 application.yml 的 MySQL 地址为 jdbc:mysql://192.168.1.100:3306/product_db?useSSL=false,重启 product-service。
练习 3 参考答案思路
  1. 异常核心信息提取:
    • 异常类型:AxiosError(404 Not Found);
    • 错误位置:productDetail.js 第 15 行,getProductDetail 函数;
    • 触发链路:productDetail.html 第 28 行→ getProductDetail → 调用 Axios 请求 /api/product/detail→ 404 错误。
  2. 根因分析:
    • 根因 1:Axios 请求的接口地址错误(/api/product/detail),后端正确地址为 /api/product/getDetail;
    • 根因 2:未处理 Axios 请求的 Promise 异常,导致'Uncaught (in promise)'错误。
  3. 排查步骤:
    • Step 1:打开浏览器'网络'面板,查看 GET 请求的'请求 URL',对比后端正确地址;
    • Step 2:修改 productDetail.js 第 15 行的接口地址为 /api/product/getDetail;
    • Step 3:在 getProductDetail 函数中添加 try-catch 捕获 Promise 异常。
  4. 调试代码:
async function getProductDetail(){
    try{
        const productId = document.getElementById("productId").value;
        if(!productId){ alert("请输入商品 ID"); return; }
        const response = await axios.get("/api/product/getDetail", {
            params: { id: productId }
        });
        console.log(response.data);
    }catch(error){
        if(error.response){ alert(`请求错误:${error.response.status}`); }
        else if(error.request){ alert("网络错误,无法连接服务器"); }
        else{ alert(`请求失败:${error.message}`); }
    }
}
document.getElementById("getDetailBtn").addEventListener("click", getProductDetail);

目录

  1. 错误定位 Prompt 设计:利用 AI 快速解析异常堆栈
  2. 核心概念:错误定位与异常堆栈的基础认知
  3. 什么是异常堆栈?
  4. 错误定位的核心痛点(Prompt 需解决的问题)
  5. 错误定位 Prompt 的核心目标
  6. 错误定位 Prompt 的设计框架:从基础到进阶
  7. 基础模板:面向新手,覆盖单一语言/单体应用
  8. 基础模板结构(通用版)
  9. 角色与任务
  10. 输入信息
  11. 输出要求(严格按以下结构输出,不要遗漏)
  12. 基础模板实战案例(Python 索引越界错误)
  13. 优化后的 getuserinfo 函数(添加参数校验与调试日志)
  14. 进阶模板:面向资深开发者,覆盖跨服务/复杂场景
  15. 进阶模板结构(微服务版)
  16. 角色与任务
  17. 输入信息(请开发者按以下格式补充,缺一不可)
  18. 输出要求(严格按以下结构,需包含跨服务排查点)
  19. 进阶模板实战案例(微服务订单创建错误)
  20. 不同语言/场景的错误定位 Prompt 适配技巧
  21. 多语言适配:Java、Python、JavaScript 差异调整
  22. 1. Java 场景:突出“异常链”与“框架层级过滤”
  23. 语言特性适配
  24. 2. Python 场景:关注“模块导入”与“第三方库错误”
  25. 语言特性适配
  26. 3. JavaScript(前端/Node.js)场景:区分“语法错误”与“运行时错误”
  27. 语言特性适配(区分前端/Node.js)
  28. 特殊场景适配:数据库错误、分布式链路错误
  29. 1. 数据库错误场景
  30. 数据库场景适配
  31. 2. 分布式链路错误场景
  32. 分布式场景适配
  33. 错误定位 Prompt 的输出优化:避免泛泛而谈,提升实用性
  34. 技巧 1:约束输出细节
  35. 输出细节约束
  36. 技巧 2:添加负面清单
  37. 输出负面清单(禁止包含以下内容)
  38. 技巧 3:示例引导
  39. 正确输出示例参考
  40. 章节总结与课后练习
  41. 章节总结
  42. 课后练习
  43. 练习 1:Python 字典键不存在错误(基础场景)
  44. 练习 2:Java 微服务数据库连接错误(进阶场景)
  45. 练习 3:前端 JavaScript 异步请求错误(场景适配)
  46. 练习参考答案(思路点拨)
  47. 练习 1 参考答案思路
  48. 练习 2 参考答案思路
  49. 练习 3 参考答案思路

更多推荐文章

查看全部
  • AI 网络技术编程测试:从理论到实践
  • 在昇腾 NPU 上部署 Llama 大模型:全流程实战与踩坑指南
  • 基于 Python 与 Stable Diffusion 的马年新春营销素材生成实战
  • n8n 集成飞书机器人实战指南:从 Webhook 到 WebSocket 的迁移
  • Epoll 水平触发与边缘触发:面试核心考点解析
  • GitHub 2026 年开源 AI 项目热度深度分析
  • Qwen3-VL-WEBUI 开箱即用:Instruct 与 Thinking 模式实战
  • FastAPI:Python 高性能 Web 框架的优雅之选
  • GitHub Copilot 使用体验与功能场景分析
  • AI 绘画在 Photoshop 中的实现:ComfyUI 插件集成指南
  • 基于 MS-Swift 微调 Qwen 大模型实战指南
  • AI 产品经理转行指南:核心能力要求与学习路径构建
  • MySQL 表操作实战指南:创建、修改与删除详解
  • VS Code 远程 Copilot 调用 Claude Agent 提示无效请求的修正方案
  • 设计一个支持万人并发抢购的秒杀系统架构方案
  • 使用 OLLAMA 国内镜像源加速本地大模型部署
  • DeepSeek-R1 大模型基于 MS-Swift 框架部署、推理与微调指南
  • Qwen3-VL 图文融合能力:统一理解与部署实战
  • 无人机平台与算法监督平台离线部署指南
  • Linux 缓冲区和文件系统

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online