NavisworksTransport/doc/guide/log_analysis_guide.md

212 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 分层拆分崩溃问题日志分析指南
## 日志文件位置
日志文件保存在桌面上:`NavisworksTransport_Debug.log`
## 详细日志记录内容
现在分层拆分功能已经添加了非常详细的日志记录,包括:
### 1. 分层拆分管理器日志 (ModelSplitterManager)
#### 会话开始标记
```
============================================================
[SESSION] 新会话开始 - 2024-12-19 14:30:25
============================================================
[INFO] [ModelSplitter] ========== 开始执行分层拆分 ==========
[INFO] [ModelSplitter] 分层策略: ByFloor
[INFO] [ModelSplitter] 输出目录: C:\Users\Desktop\Output
[INFO] [ModelSplitter] 属性名称: Level
[INFO] [ModelSplitter] 文件命名模式: {ProjectName}_{LayerName}
```
#### 系统状态监控
```
[INFO] [ModelSplitter] 系统内存使用: 256 MB
[INFO] [ModelSplitter] 当前进程内存: 512 MB
```
#### 每个分层处理详情
```
[INFO] [ModelSplitter] ========== 开始处理分层: Floor_01 ==========
[INFO] [ModelSplitter] 分层元素数量: 1250
[INFO] [ModelSplitter] 输出文件路径: C:\Output\Project_Floor_01.nwd
[INFO] [ModelSplitter] 处理前内存使用: 280 MB
[INFO] [ModelSplitter] 开始导出文件...
[INFO] [ModelSplitter] 处理后内存使用: 320 MB
```
#### 稳定状态管理
```
[INFO] [ModelSplitter] 开始确保Navisworks稳定状态...
[INFO] [ModelSplitter] 当前文档: MyProject.nwd
[INFO] [ModelSplitter] 模型数量: 3
[INFO] [ModelSplitter] 当前选择项数量: 0
[INFO] [ModelSplitter] 重置所有隐藏状态...
[INFO] [ModelSplitter] 隐藏状态重置完成
[INFO] [ModelSplitter] 清除当前选择...
[INFO] [ModelSplitter] 选择清除完成
```
### 2. 文件导出器日志 (NavisworksFileExporter)
#### 导出会话开始
```
============================================================
[INFO] [FileExporter] ========== 开始文件导出 ==========
[INFO] [FileExporter] 元素数量: 1250
[INFO] [FileExporter] 输出路径: C:\Output\Project_Floor_01.nwd
[INFO] [FileExporter] 导出策略: VisibilityControl
[INFO] [FileExporter] 文件格式: nwd
```
#### 内存状态监控
```
[INFO] [FileExporter] 导出前内存使用: 280 MB
[INFO] [FileExporter] 导出前进程内存: 520 MB
```
#### 文件保存重试机制
```
[INFO] [FileExporter] 开始保存文档到: C:\Output\Project_Floor_01.nwd
[INFO] [FileExporter] 尝试保存文档,第 1 次
[INFO] [FileExporter] 文档保存成功: C:\Output\Project_Floor_01.nwd, 大小: 15728640 字节
```
### 3. 错误和异常日志
#### 详细错误信息
```
[ERROR] [ModelSplitter] 处理分层异常: 内存不足
[ERROR] [ModelSplitter] 异常堆栈: at NavisworksTransport.ModelSplitterManager...
[ERROR] [FileExporter] 第 1 次保存尝试失败: 文件被占用
[INFO] [FileExporter] 等待 1000ms 后重试...
```
#### 错误恢复过程
```
[INFO] [ModelSplitter] 开始错误恢复...
[INFO] [ModelSplitter] 重置所有可见性状态
[INFO] [ModelSplitter] 清除选择
[INFO] [ModelSplitter] 强制刷新视图
[INFO] [ModelSplitter] 错误恢复完成
```
## 如何分析崩溃问题
### 1. 查看最新的会话日志
打开桌面上的 `NavisworksTransport_Debug.log` 文件,找到最新的会话分隔符:
```
============================================================
[SESSION] 新会话开始 - [最新时间]
============================================================
```
### 2. 关键崩溃点检查
#### A. 内存使用情况
查找内存使用记录,看是否有内存急剧增长:
```bash
# 搜索内存相关日志
内存使用: 256 MB -> 512 MB -> 1024 MB -> 崩溃
```
#### B. 可见性操作
查找可见性重置操作是否成功:
```bash
# 查找这些关键步骤
[INFO] [ModelSplitter] 重置所有隐藏状态...
[INFO] [ModelSplitter] 隐藏状态重置完成 # 如果没有这行,说明在重置时崩溃
```
#### C. 文件保存操作
查找文件保存过程:
```bash
[INFO] [FileExporter] 尝试保存文档,第 1
# 如果后面没有"保存成功"或"保存失败",说明在保存时崩溃
```
#### D. 异常处理
查找ERROR级别的日志
```bash
[ERROR] [ModelSplitter] 处理分层异常: [具体错误信息]
[ERROR] [FileExporter] 导出异常: [具体错误信息]
```
### 3. 常见崩溃模式
#### 模式1内存耗尽崩溃
```
[INFO] 系统内存使用: 256 MB
[INFO] 系统内存使用: 512 MB
[INFO] 系统内存使用: 1024 MB
[INFO] 系统内存使用: 2048 MB
# 然后突然中断,没有后续日志
```
#### 模式2可见性操作崩溃
```
[INFO] [ModelSplitter] 重置所有隐藏状态...
# 然后突然中断,没有"重置完成"日志
```
#### 模式3文件保存崩溃
```
[INFO] [FileExporter] 尝试保存文档,第 1 次
# 然后突然中断,没有保存结果日志
```
#### 模式4COM对象访问崩溃
```
[ERROR] [ModelSplitter] 确保稳定状态失败: 对象引用未设置到对象的实例
[ERROR] [FileExporter] 可见性控制导出失败: 无法访问已释放的对象
```
## 快速日志查看方法
### 方法1使用记事本
1. 打开桌面上的 `NavisworksTransport_Debug.log`
2.`Ctrl+End` 跳到文件末尾
3. 向上滚动查看最新的日志
### 方法2使用命令行推荐
```cmd
# 查看最后100行日志
tail -n 100 "%USERPROFILE%\Desktop\NavisworksTransport_Debug.log"
# 或者使用PowerShell
Get-Content "$env:USERPROFILE\Desktop\NavisworksTransport_Debug.log" -Tail 100
```
### 方法3搜索关键词
在记事本中按 `Ctrl+F` 搜索:
- `ERROR` - 查找所有错误
- `异常` - 查找异常信息
- `崩溃` - 查找崩溃相关信息
- `内存使用` - 查找内存状态
- `SESSION` - 查找会话开始
## 提供技术支持时需要的信息
如果问题仍然存在,请提供以下日志片段:
1. **最新会话的完整日志**从SESSION开始到结束或中断
2. **最后的ERROR日志**(如果有的话)
3. **内存使用趋势**(多个内存使用记录)
4. **崩溃前的最后几行日志**
## 日志文件管理
### 清理日志文件
如果日志文件太大,可以在代码中调用:
```csharp
LogManager.ClearLog(); // 清空日志文件
```
### 日志文件位置
- 默认位置:`%USERPROFILE%\Desktop\NavisworksTransport_Debug.log`
- 可以通过 `LogManager.LogFilePath` 属性获取确切路径
现在你可以运行分层拆分功能,如果再次崩溃,日志文件会记录详细的执行过程,帮助我们精确定位崩溃的原因和位置。