loov--lensm
79 行
3.0 KiB
Markdown
79 行
3.0 KiB
Markdown
<!-- WEHUB_ZH_README -->
|
||
> [!NOTE]
|
||
> 本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
|
||
> [English](./README.en.md) · [原始项目](https://github.com/loov/lensm) · [上游 README](https://github.com/loov/lensm/blob/HEAD/README.md)
|
||
> 原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
|
||
|
||
# lensm
|
||
|
||
用于查看汇编(assembly)与源码(source)的工具。
|
||
|
||

|
||
|
||
使用常规的 Go 命令安装:
|
||
|
||
```
|
||
go install loov.dev/lensm@main
|
||
```
|
||
|
||
_在 Linux 上,你可能需要添加一些 [额外依赖](https://gioui.org/doc/install/linux). 你可以分别使用 `go install --tags nowayland loov.dev/lensm@main` 或 `go install --tags nox11 loov.dev/lensm@main` 来跳过 Wayland 或 X11 版本的构建。_
|
||
|
||
在本地构建此检出副本:
|
||
|
||
```
|
||
go build -o lensm .
|
||
```
|
||
|
||
GitHub Actions 还会为 Apple Silicon
|
||
与 Intel 构建可安装的 macOS 磁盘映像。从一次成功的 CI 运行中下载 DMG 构建产物,打开后,将
|
||
`Lensm.app` 拖入 Applications。CI 构建采用 ad-hoc 签名,因此 macOS
|
||
首次启动时可能需要通过 **Control-click → Open**(按住 Control 键点击 → 打开)。
|
||
|
||
在 macOS 上本地构建 DMG:
|
||
|
||
```
|
||
./scripts/build-macos-dmg.sh 0.0.0 1 "$(go env GOARCH)"
|
||
```
|
||
|
||
在 Linux 上,若需跳过某一窗口后端,可使用相同的 Gio 标签:
|
||
|
||
```
|
||
go build -tags nowayland -o lensm .
|
||
go build -tags nox11 -o lensm .
|
||
```
|
||
|
||
可通过可执行文件路径运行本程序,也可不带参数启动,
|
||
然后从顶部栏加载可执行文件。在 macOS 上,使用 Choose... 通过原生 Finder 文件对话框选择可执行文件。UI 内提供函数过滤器。
|
||
`-watch` 可在可执行文件及其信息发生变化时自动重新加载。
|
||
|
||
```
|
||
lensm -watch lensm
|
||
```
|
||
|
||
在代码视图中:
|
||
|
||
- 跟随调用目标,使用 `Alt+Left/Right`(或 `Cmd/Ctrl+[` 与
|
||
`Cmd/Ctrl+]`)在函数之间导航;
|
||
- 将鼠标悬停在汇编指令上,若 Lensm 有匹配规则,可查看其引用及简化说明;
|
||
- 在 Go 汇编、原生汇编或源码行上拖动以选择一块区域,然后使用 `Cmd/Ctrl+C` 复制。
|
||
`Shift` 可扩展选区,`Escape` 可清除选区。
|
||
|
||
通过 stdio 以 MCP 服务器方式运行 lensm:
|
||
|
||
```
|
||
lensm mcp [-comments ./lensm.lensm-comments.json] ./lensm
|
||
```
|
||
|
||
MCP 服务器提供列出函数、读取函数的 Go 源码、Go 汇编与原生汇编,以及读取或写入注释等工具。默认情况下,注释保存在名为
|
||
`<executable>.lensm-comments.json` 的 sidecar(附属)文件中。
|
||
|
||
当 GUI 与独立的 `lensm mcp` 进程写入同一 sidecar 时,
|
||
保存会按注释合并:各进程的新增、编辑与删除都会保留,仅当同一注释存在冲突编辑时,
|
||
以最后写入者为准。
|
||
|
||
注意:本程序需要在本机构建的二进制文件,否则无法加载函数的源码。
|
||
|
||
## 为什么?
|
||
|
||
我在 https://www.storj.io/blog/lensm 撰写了一篇博客,介绍核心功能的设计动机与实现原理。
|