ucs_logviewer
浏览工程目录、搜索文件与内容、并排查看多种文件、定位行号和跟踪运行日志的完整用户指南
1. Quick Start
# 以一个工程目录为可见范围 ./ucs_logviewer --root /proj/chip/run_001 # 启动时打开一个文件并定位到第 850 行 ./ucs_logviewer \ --root /proj/chip/run_001 \ --open logs/place_opt.log \ --line 850 # 启动时并排打开多个文件;--open 可以重复 ./ucs_logviewer --root /proj/chip/run_001 \ --open reports/setup.rpt.gz \ --open reports/hold.rpt.gz \ --open reports/qor.csv
2. 界面结构
| 区域 | 作用 | 关键操作 |
|---|---|---|
| 顶部栏 | 显示当前目录并管理 root。 | Choose Root、Up、Refresh、Hidden。 |
| Directory | 列出当前目录。目录优先,其次 symlink、文件;Name、Size、Modified 对齐显示。 | 双击目录进入;单击文件打开;多选后使用 Open Selected。 |
| Search | 按文件名或内容搜索。 | 选择 Glob / Find / Content / In File / In Page,输入 pattern。 |
| Search Results | 显示路径、行号和匹配行摘要。 | 点击结果打开并高亮行;多选结果后一起打开。 |
| Workspace | 显示一个或多个 preview pane。 | 点击标题设为 active;双击标题最大化/恢复。 |
| 工具栏 | 对 active file 或当前目录执行操作。 | Live Tail、Go to line、Copy Path、Export、Edit、ZIP Dir。 |
| Status | 显示打开文件数、搜索结果数、active path、错误和耗时。 | 遇到无响应时先读取这里的状态。 |
- 左侧选择 Content,输入正则
ERROR|WARNING,结果按文件、行号和摘要列出。 - 点击第 1 条结果后,右侧自动打开对应文件、跳到第 4 行,并以黄色高亮命中行。
- 顶部行号框同步显示
4;底部状态栏显示规范化文件路径和行号。
3. Browse 与 Root
3.1 进入和返回目录
- 双击带
[DIR]的行进入目录;指向目录的 symlink 也可双击进入。 - 点击 Up 返回父目录。到达 root 后继续点击不会越过 root。
- 点击 Refresh 重新读取当前目录,适合 run 正在产生新文件的场景。
- 勾选 Hidden 后显示以点开头的文件和目录;搜索也会按相同设置决定是否进入隐藏目录。
3.2 更换 Root
点击 Choose Root,选择一个存在且可读的目录。程序会 canonicalize 路径并验证目录可访问;选择 / 不会重启程序,但会把整个本机文件系统设为搜索范围,通常不建议这样做。
4. 五种搜索模式
| Mode | Pattern 类型 | Scope | 结果 |
|---|---|---|---|
| Glob | glob:*、?、[abc] | 只看当前目录,不递归。 | 匹配的文件或目录。 |
| Find | glob | 从当前目录递归;同时匹配 basename 和相对路径。 | 匹配的文件或目录。 |
| Content | 正则表达式 | 从当前目录递归读取文本内容。 | 每一个匹配行,含路径、行号、摘要。 |
| In File | 正则表达式 | 当前 active text file 全部可读内容。 | 匹配行;输入停止约 0.2 秒后动态刷新。 |
| In Page | 正则表达式 | Page Mode 只搜当前页;Scroll Mode 等同全文。 | 匹配行。 |
Case sensitive 未勾选时,glob 与正则均不区分大小写。Content / In File / In Page 的 pattern 是正则,不是普通字符串。
4.1 文件名搜索案例
# 当前目录下所有压缩报告 Mode = Glob Pattern = *.rpt.gz # 递归找所有 setup/hold 报告 Mode = Find Pattern = *setup*.rpt* # 根据相对路径找 reports 子树中的文件 Mode = Find Pattern = reports/**/*.log
4.2 内容搜索案例
# 递归找 ERROR 或 FATAL Mode = Content Pattern = \b(ERROR|FATAL)\b # 查找小于 0 的 slack 行 Mode = Content Pattern = ^\s*slack\b.*-\d # active file 内动态搜索 startpoint Mode = In File Pattern = ^Startpoint:
Content search 内置读取普通文本、.gz、.bz2 和 .xz;不需要外部解压命令。遇到二进制 NUL 字节时停止读取该文件,避免把二进制误当文本。
4.3 从结果跳到命中行
- 点击一条带行号的结果,程序打开对应文件并高亮该行。
- 文件已打开时直接切换 active pane,不重复构造 preview。
- 双击单条带行号的结果可另外打开前后各 10 行的 context 窗口。
- 多选来自不同文件的结果后,双击或点击 Open Selected 可并排查看这些文件。
5. 同时打开多个文件
- 在 Directory 或 Search Results 中选择多个文件。
- 点击 Open Selected。重复路径会自动去重。
- Workspace 根据文件数自动等分为 grid;内容超过窗口高度时出现 workspace 纵向滚动条。
- 单击 pane 标题把它设为 active,Go to line、Tail、Copy Path、Export、Edit 都作用于 active file。
- 双击 pane 标题临时最大化;再次双击恢复全部 pane。
程序最多缓存 24 个 preview。再次打开尺寸相同的近期文件时可复用缓存;切换普通文本且语法类型相同时也会复用单一文本 pane,减少重新建 UI 的等待。
- 每个 pane 都有独立标题、滚动条和文本导航;点击标题即可切换 active file。
- Tcl pane 自动显示关键字、字符串、变量和注释高亮。
- 空白区域只用于补齐规则 grid;双击任一标题可临时最大化该文件,再次双击恢复。
6. 文本浏览、Page Mode 与高亮
6.1 Scroll Mode
默认显示完整 preview 内容,可以连续滚动。In Page 在 Scroll Mode 下搜索当前已加载的全文。
6.2 Page Mode
- 点击 Mode: Scroll 切换为 Mode: Page。
- 使用 First、Prev、Next、Last 翻页。
- 页大小可选 50、100、200、500 行。
- Page 信息显示当前页、总页数和当前行范围。
- In Page 只搜索当前页的行范围;换页后再次搜索即可得到新页结果。
6.3 Go to line
输入一条从 1 开始的行号并点击 Go to line。Scroll Mode 将目标行放到视图中部附近;Page Mode 自动切到包含该行的页并高亮该行。Content 搜索结果也使用同一定位逻辑。
6.4 自动语法高亮
根据文件扩展名或 shebang 识别并高亮关键字、字符串、注释、数字和变量。支持 Tcl/SDC/UPF、Perl、Python、Shell、Verilog/SystemVerilog、Rust、C/C++/Java/JavaScript/TypeScript/Go、JSON、HTML/XML/SVG、YAML 和 Makefile。压缩后缀会先移除,因此 flow.tcl.gz 仍按 Tcl 显示。
7. 文件格式与静态预览
| 类型 | 行为 | 限制 / 操作 |
|---|---|---|
| Text / Log / Code | 行号、Scroll/Page、搜索、跳转、语法高亮。 | 普通文本及 gzip/bzip2/xz 压缩文本。 |
| CSV | 按表格解析,保留 quoted comma。 | 最多显示约 2,000 行、256 列。 |
| XLSX | 每个 worksheet 一个 tab,静态表格浏览。 | 每个 sheet 最多 2,000 行、256 列;不执行公式或宏。 |
| HTML | Rendered 与 HTML Source 两个 tab;表格、基础 CSS、本地图片和本地链接可显示。 | 脚本、iframe、object、embed、refresh 和事件属性被移除;不执行 JavaScript。 |
| 页面渲染并提供 First / Prev / Next / Last。 | macOS 使用 PDFKit;RHEL7/RHEL8 使用单文件内嵌 PDFium,不依赖系统安装 PDF 工具。 | |
| Visio | 直接打开旧版 .vsd 和新版 .vsdx,每个 drawing page 转为矢量页面显示。 | 提供 Prev / Next、页码输入和 Go;转换组件已经包含在交付文件中,不需要安装 Visio、LibreOffice 或浏览器。加密或损坏文档会明确报错。 |
| Image | 显示 PNG/JPEG/GIF/BMP/WebP/SVG/ICO/TIFF。 | 按 pane 缩放。 |
| Archive | 浏览 ZIP、TAR、TGZ、TBZ、TXZ 等成员;点击成员预览文本、CSV、HTML 或图片。 | 成员类型以 archive metadata 为准;名为 .py 的目录仍显示为目录。 |
| Binary | 显示文件大小提示。 | 不把 NUL-containing 文件当文本。 |
HTML 的相对 stylesheet、image 和 hyperlink 以 HTML 文件所在目录解析,并且必须留在 root 内。外部 HTTP/HTTPS 链接保持链接形式,但预览是静态的;不会运行页面脚本。
- 上方显示 Prev、Next、页码输入、Go 和当前页数。
- 单页与多页文件使用相同界面;多页文件可顺序翻页,也可输入页码直达。
- 转换结果以矢量页面显示,适合检查 floorplan、框图和带尺寸标注的图纸。
8. Live Tail
- 打开一个正在增长的 log,使它成为 active file。
- 点击 Live Tail。程序立即读取最后若干行,并按配置周期刷新。
- Tail 激活后文本自动回到 Scroll Mode 并滚动到末尾。
- 再次点击 Live Tail 停止刷新。
默认显示最后 200 行,每 3 秒刷新。普通文件从文件尾部读取;压缩文本需要解压已加载范围,因此更适合已完成报告,不建议对仍在写入的压缩文件做实时 Tail。
9. Copy、Export、Edit 与 ZIP
| Action | 对象 | 行为 |
|---|---|---|
| Copy Path | active file | 把规范化完整路径复制到系统剪贴板。 |
| Export | active file | 原样复制到用户选择的位置;不改变源文件。 |
| Edit | active text file | 打开 modal editor;Save 前再次确认,使用同目录临时文件和 atomic rename 保存,并保留原权限。 |
| ZIP Dir | 当前 Directory | 递归打包当前目录;symlink 不跟随;输出 ZIP 必须放在被打包目录之外。 |
10. Configuration
--config 接受 strict JSON:未知字段会报错。CLI 的 --root 优先于 JSON 中的 root。
{
"root": "/proj/chip/run_001",
"show_hidden": false,
"preview_max_bytes": 33554432,
"search_max_results": 10000,
"tail_lines": 500,
"tail_refresh_seconds": 2
}
| Field | Default | 约束 |
|---|---|---|
root | 启动时当前目录 | 必须存在并且是目录。 |
show_hidden | false | 控制浏览和递归搜索。 |
preview_max_bytes | 16 MiB | 1 KiB 至 1 GiB。 |
search_max_results | 5,000 | 1 至 1,000,000。 |
tail_lines | 200 | 1 至 1,000,000。 |
tail_refresh_seconds | 3 | 必须大于 0。 |
11. Command-Line Reference
Usage: ucs_logviewer [OPTIONS]
Options:
--root <DIRECTORY> Root directory available in the browser
--open <FILE> File to open at startup; repeatable
--line <NUMBER> One-based line after opening a text file
--config <JSON> Strict JSON configuration file
--debug <0-4> Requested debug level [default: 0]
-h, --help
-V, --version
--line 必须与至少一个 --open 同时使用。兼容 -debug N 拼写。相对 --open 路径以最终 root 为基准。
11.1 Debug 与日志
日志依次尝试写入 $UCS_LOG_DIR、启动时当前目录、系统临时目录;文件名为 ucs_logviewer_YYYYMMDD_HHMMSS_PID.log。Debug level 3 会在日志目录的 debug/run_.../ 下写 effective config、目录项和搜索结果等诊断材料。
12. 完整使用案例
12.1 查找所有严重 timing violation
- Root 选择当前 STA run。
- 进入 reports 的共同父目录。
- Content 输入
^\s*slack\b.*-\d,点击 Search。 - 勾选需要比较的多个报告结果,点击 Open Selected。
- 点击各 pane 标题切换 active,再用 Go to line 或 In File 缩小范围。
12.2 对比三个阶段的 QoR CSV
./ucs_logviewer --root /proj/chip \ --open create_db/qor.csv \ --open place_opt/qor.csv \ --open route_opt/qor.csv
三个 CSV 以等分 pane 显示;双击某一 pane 标题可以临时最大化检查长表。
12.3 跟踪 PnR run log
./ucs_logviewer --root /proj/chip/run_001 \ --open logs/route_opt.log
启动后点击 Live Tail;需要检查已有 ERROR 时切换 In File,输入 \b(ERROR|FATAL)\b,结果会随输入动态出现。完成搜索后可重新打开 Live Tail。
12.4 查看报告包而不解压到项目
直接打开 .zip 或 .tar.gz,在 archive member 列表中选择 HTML、CSV、图片或文本成员预览。程序不会把成员写回项目目录。
12.5 打开多页 VSD floorplan
./ucs_logviewer --root /proj/chip \ --open docs/floorplan_review.vsd
打开后页面保持矢量清晰度。使用 Prev / Next 顺序浏览,或在页码框中输入目标页并点击 Go。VSD 转换在本机进程内完成,不上传文件,也不调用客户环境中的外部应用。
13. Troubleshooting
| 现象 | 原因与处理 |
|---|---|
| Choose Root 后看不到旧文件 | 旧 preview 仍保留,但 Directory 已切到新 root;旧文件若在新 root 外不能再次搜索、编辑或导出。选择原 root 即可。 |
| Glob 只找到当前目录 | 这是设计行为;递归查找请使用 Find。 |
| Content 很慢 | 缩小当前目录;降低 root 范围;关闭 Hidden;使用更具体的正则;适当降低 preview_max_bytes 或 search_max_results。 |
| In File 没有动态更新 | 动态触发仅用于 In File;确认 active pane 是文本,且 pattern 是有效正则。In Page 需要点击 Search。 |
| 点结果没有跳到行 | 目录/文件名结果没有行号;只有 Content、In File、In Page 结果可以定位行。CSV/XLSX/PDF 也不使用文本行号。 |
| Preview truncated | 文件超过 preview_max_bytes;在 config 中提高上限后重启,或使用 Content 搜索定位所需部分。 |
| HTML 样式或链接不完整 | 只支持静态、安全子集;脚本和复杂选择器不会执行。确认本地资源位于 root 内且相对路径正确。 |
| VSD 无法打开 | 确认文件是有效且未加密的 Visio 文档。错误信息包含“不支持版本、加密或损坏”等转换原因;客户机器不需要另装转换软件。 |
| ZIP 失败 | 输出不能位于正在打包的目录内部;选择它的父目录或其他目录。 |
| Edit 失败 | 文件可能不是 UTF-8、超过 editable limit、只读、位于 root 外或不是普通文件。 |
| License error | 确认 UCS license 位于约定位置、日期与用户有效;Linux 环境需有 OpenSSL。 |