# 分层拆分崩溃问题日志分析指南

## 日志文件位置

日志文件保存在桌面上：`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 次
# 然后突然中断，没有保存结果日志
```

#### 模式4：COM对象访问崩溃
```
[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` 属性获取确切路径

现在你可以运行分层拆分功能，如果再次崩溃，日志文件会记录详细的执行过程，帮助我们精确定位崩溃的原因和位置。