# crash_locator **Repository Path**: rvsmart-porting/crash_locator ## Basic Information - **Project Name**: crash_locator - **Description**: Crash Locator for Java Program - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-04-30 - **Last Updated**: 2025-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Crash Locator 本工具针对 Java 应用的崩溃场景,读取静态分析工具的错误定位报告,利用 tree-sitter 和静态分析工具的定位信息进行代码分析、收集上下文,最后利用 LLM 进行误报过滤和解释生成。 ## 依赖与环境 - **Python 版本:** >= 3.11 - **依赖包:** _ beartype>=0.20.2 _ cachier>=3.1.2 _ openai>=1.75.0 _ pydantic>=2.11.3 _ pydantic-settings>=2.9.1 _ tenacity>=9.1.2 _ tqdm>=4.67.1 _ tree-sitter>=0.24.0 _ tree-sitter-java>=0.23.5 *注意:* 项目使用 `uv` 作为包管理和运行工具,建议安装 `uv`。 ## 使用方法 1. **准备数据:** 将需要分析的 Java 项目相关数据放置在 `Data/resources` 目录下(如果此目录不存在,请根据实际情况创建或修改配置)。 需要的数据包括: - crash_report: 错误崩溃报告 - android_code: 安卓源代码,应包含多个版本 - application_code: 应用源代码 - android_cg: 通过静态分析工具构建的安卓框架 Call Graph,供代码分析使用 - application_cg: 通过静态分析工具构建的应用 Call Graph,供代码分析使用 2. **配置:** 配置文件位于 `config.py`,需要通过 `.env` 文件配置以下内容: - CRASH_LOCATOR_OPENAI_API_KEY: OpenAI API Key - CRASH_LOCATOR_OPENAI_MODEL: OpenAI 模型名称 - CRASH_LOCATOR_OPENAI_API_BASE: OpenAI API Base URL 3. **预检查:** 运行预检查脚本,确保环境和数据配置正确: ```bash uv run -m crash_locator.pre_check ``` 4. **运行崩溃定位:** 执行主程序进行崩溃定位分析: ```bash uv run -m crash_locator ``` ## 代码结构 ``` crash_locator/ ├── __init__.py # 包初始化文件 ├── __main__.py # 主程序入口 (uv run -m crash_locator 时执行) ├── pre_check.py # 预检查脚本 ├── run.py # 崩溃定位主逻辑脚本 ├── config.py # 配置文件处理 ├── my_types.py # 自定义数据类型 ├── prompt.py # LLM Prompt 相关 ├── exceptions.py # 自定义异常 └── utils/ # 工具函数目录 ├── __init__.py # 工具包初始化 ├── llm.py # Large Language Model 相关交互 ├── java_parser.py # Java 代码解析 (基于 tree-sitter) ├── tree_sitter_helper.py # Tree-sitter 辅助函数 ├── helper.py # 通用辅助函数 ├── cg.py # Call Graph 相关处理 └── parser.py # 其他解析器相关 ``` ## 注意事项 - 请确保已正确配置 OpenAI API Key 或其他必要的环境变量(如果项目需要访问 LLM)。 - `Data/resources` 的具体结构和内容可能需要根据 `config.py` 或实际处理逻辑进行调整。 ## TODO - [ ] 添加更多静态分析工具的支持 - [ ] 添加 RISC-V 架构相关的错误分析 - [ ] 支持约束提取来提供上下文