Update code
This commit is contained in:
176
dev-assistant-mcp/dist/tools/codeDebug.js
vendored
Normal file
176
dev-assistant-mcp/dist/tools/codeDebug.js
vendored
Normal file
@@ -0,0 +1,176 @@
|
||||
export const codeDebugTool = {
|
||||
name: "code_debug",
|
||||
description: "分析代码错误,返回结构化的调试信息:错误分类、常见原因、排查步骤和修复模式。",
|
||||
inputSchema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
code: {
|
||||
type: "string",
|
||||
description: "有问题的代码",
|
||||
},
|
||||
error_message: {
|
||||
type: "string",
|
||||
description: "错误信息或堆栈跟踪",
|
||||
},
|
||||
language: {
|
||||
type: "string",
|
||||
description: "编程语言",
|
||||
},
|
||||
expected_behavior: {
|
||||
type: "string",
|
||||
description: "期望的正确行为(可选)",
|
||||
},
|
||||
},
|
||||
required: ["code", "error_message", "language"],
|
||||
},
|
||||
};
|
||||
const errorPatterns = [
|
||||
{
|
||||
pattern: /TypeError.*(?:undefined|null|is not a function|Cannot read prop)/i,
|
||||
category: "类型错误 (TypeError)",
|
||||
commonCauses: [
|
||||
"访问了 undefined/null 的属性",
|
||||
"函数调用目标不是函数",
|
||||
"异步操作返回值未正确 await",
|
||||
"解构赋值时对象为空",
|
||||
],
|
||||
fixStrategies: [
|
||||
"使用可选链 ?. 和空值合并 ??",
|
||||
"添加前置空值检查",
|
||||
"确认异步操作是否正确 await",
|
||||
"检查 import 路径和导出方式是否匹配",
|
||||
],
|
||||
},
|
||||
{
|
||||
pattern: /ReferenceError.*is not defined/i,
|
||||
category: "引用错误 (ReferenceError)",
|
||||
commonCauses: [
|
||||
"变量/函数未声明就使用",
|
||||
"拼写错误",
|
||||
"作用域问题(块级作用域、闭包)",
|
||||
"缺少 import 语句",
|
||||
],
|
||||
fixStrategies: [
|
||||
"检查变量名拼写",
|
||||
"确认 import/require 语句",
|
||||
"检查变量声明的作用域",
|
||||
],
|
||||
},
|
||||
{
|
||||
pattern: /SyntaxError/i,
|
||||
category: "语法错误 (SyntaxError)",
|
||||
commonCauses: [
|
||||
"括号/引号不匹配",
|
||||
"缺少分号或逗号",
|
||||
"关键字拼写错误",
|
||||
"ESM/CJS 混用",
|
||||
],
|
||||
fixStrategies: [
|
||||
"检查报错行及前几行的括号/引号匹配",
|
||||
"确认模块系统一致性(import vs require)",
|
||||
"使用格式化工具自动修复",
|
||||
],
|
||||
},
|
||||
{
|
||||
pattern: /ECONNREFUSED|ETIMEDOUT|ENOTFOUND|fetch failed|network/i,
|
||||
category: "网络错误",
|
||||
commonCauses: [
|
||||
"目标服务未启动",
|
||||
"URL/端口配置错误",
|
||||
"DNS 解析失败",
|
||||
"防火墙/代理阻断",
|
||||
"SSL 证书问题",
|
||||
],
|
||||
fixStrategies: [
|
||||
"确认目标服务运行状态和端口",
|
||||
"检查 URL 配置(协议、域名、端口)",
|
||||
"添加重试机制和超时控制",
|
||||
"检查网络连通性",
|
||||
],
|
||||
},
|
||||
{
|
||||
pattern: /ENOENT|no such file|Module not found|Cannot find module/i,
|
||||
category: "文件/模块未找到",
|
||||
commonCauses: [
|
||||
"文件路径错误",
|
||||
"依赖未安装(缺少 npm install)",
|
||||
"相对路径 vs 绝对路径搞混",
|
||||
"文件扩展名不匹配",
|
||||
],
|
||||
fixStrategies: [
|
||||
"检查文件路径和大小写",
|
||||
"运行 npm install 安装依赖",
|
||||
"检查 tsconfig/webpack 的路径别名配置",
|
||||
"确认文件扩展名(.js/.ts/.mjs)",
|
||||
],
|
||||
},
|
||||
{
|
||||
pattern: /Permission denied|EACCES|403|401|Unauthorized/i,
|
||||
category: "权限错误",
|
||||
commonCauses: [
|
||||
"文件权限不足",
|
||||
"API 认证失败(Token 过期/错误)",
|
||||
"CORS 跨域限制",
|
||||
],
|
||||
fixStrategies: [
|
||||
"检查文件/目录权限(chmod)",
|
||||
"检查 API Key / Token 是否有效",
|
||||
"配置正确的 CORS 头",
|
||||
],
|
||||
},
|
||||
{
|
||||
pattern: /out of memory|heap|stack overflow|Maximum call stack/i,
|
||||
category: "内存/栈溢出",
|
||||
commonCauses: [
|
||||
"无限递归",
|
||||
"处理超大数据集未分页",
|
||||
"内存泄漏(未清理的引用)",
|
||||
],
|
||||
fixStrategies: [
|
||||
"检查递归终止条件",
|
||||
"对大数据使用流式处理或分页",
|
||||
"使用 --max-old-space-size 调整堆内存",
|
||||
"排查事件监听器和定时器泄漏",
|
||||
],
|
||||
},
|
||||
];
|
||||
export async function executeCodeDebug(args) {
|
||||
const { code, error_message, language, expected_behavior } = args;
|
||||
// 匹配错误模式
|
||||
const matched = errorPatterns.filter((ep) => ep.pattern.test(error_message));
|
||||
const categories = matched.length > 0 ? matched : [{
|
||||
category: "未分类错误",
|
||||
commonCauses: ["请仔细阅读完整错误信息和堆栈"],
|
||||
fixStrategies: ["根据错误信息定位问题代码行", "添加日志逐步排查"],
|
||||
}];
|
||||
// 从堆栈中提取行号
|
||||
const lineRefs = [];
|
||||
const lineRegex = /(?:at\s+.+?|File\s+.+?):(\d+)(?::(\d+))?/g;
|
||||
let match;
|
||||
while ((match = lineRegex.exec(error_message)) !== null) {
|
||||
lineRefs.push(`行 ${match[1]}${match[2] ? `:${match[2]}` : ""}`);
|
||||
}
|
||||
const output = [
|
||||
`# 调试分析报告`,
|
||||
``,
|
||||
`**语言**: ${language}`,
|
||||
``,
|
||||
`## 错误信息`,
|
||||
"```",
|
||||
error_message,
|
||||
"```",
|
||||
``,
|
||||
];
|
||||
if (lineRefs.length > 0) {
|
||||
output.push(`## 堆栈中的关键位置`, ...lineRefs.map((l) => `- ${l}`), ``);
|
||||
}
|
||||
for (const cat of categories) {
|
||||
output.push(`## 错误类型: ${cat.category}`, ``, `### 常见原因`, ...cat.commonCauses.map((c) => `- ${c}`), ``, `### 修复策略`, ...cat.fixStrategies.map((s) => `- ${s}`), ``);
|
||||
}
|
||||
if (expected_behavior) {
|
||||
output.push(`## 期望行为`, expected_behavior, ``);
|
||||
}
|
||||
output.push(`## 问题代码`, "```" + language, code, "```", ``, `## 排查步骤`, `1. 根据以上错误分类和常见原因,定位问题代码行`, `2. 在可疑位置添加日志输出,验证变量值`, `3. 根据修复策略实施修改`, `4. 编写测试用例确认修复有效`);
|
||||
return output.join("\n");
|
||||
}
|
||||
//# sourceMappingURL=codeDebug.js.map
|
||||
Reference in New Issue
Block a user