212 lines
6.4 KiB
Markdown
212 lines
6.4 KiB
Markdown
# 分层拆分崩溃问题日志分析指南
|
||
|
||
## 日志文件位置
|
||
|
||
日志文件保存在桌面上:`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` 属性获取确切路径
|
||
|
||
现在你可以运行分层拆分功能,如果再次崩溃,日志文件会记录详细的执行过程,帮助我们精确定位崩溃的原因和位置。 |