Tencent/loli_profiler

Memory instrumentation tool with CI and AI support for android app&game developers.

TL;DR

LoliProfiler 是一个用于 Android 应用的开源内存分析工具套件。它可捕获原生堆分配,显示调用栈、树图、时间线和截图,并支持对比两次运行。它提供图形化界面(基于 Dear ImGui 构建)和无头 CLI,还附带一个 Python 包,用于查询保存的数据。

功能

组件 功能
LoliProfilerImGui 桌面 GUI – 启动或附加到 Android 应用,查看实时或已保存的捕获,导出 .loli 文件。
LoliProfilerCLI 无头捕获,导出为纯文本或 SQLite,离线符号化,通过命令行比较捕获。
LoliProfilerCompare 专用 UI,支持并排加载两个捕获,带有可停靠的 Base、Comparer 和 Diff 面板。
agentcli (Python) 小型库,可打开 SQLite 快照(.db),并允许脚本查询调用树(使用 loli 命令)。

在捕获过程中,您可以选择保留所有分配记录,或仅保留停止时仍存活的记录。UI 支持在两种视图间切换。当您提供应用的调试符号文件时,会显示符号名称。

如何运行

  1. 构建 – 从仓库根目录运行 python scripts/build.py。该脚本会提供交互式菜单,用于编译 GUI、CLI、Android 钩子,并打包发布 ZIP。如果确认,它会自动下载 Android SDK/NDK。
  2. 前置条件 – 请参阅 docs/BUILD.md 了解所需编译器、CMake 以及平台特定说明(Windows/macOS/Linux)。
  3. 快速入门 – 按照 docs/QUICK_START.md(或中文版)操作:
    • 构建工具
    • 通过 ADB 连接设备
    • 启动 LoliProfilerImGui 附加到应用,进行捕获并探索结果
  4. 无头使用 – 使用 LoliProfilerCLI 并加上 --log-file profiler.log --log-level debug 等标志,无 UI 捕获并导出数据。
  5. 对比 – 使用 LoliProfilerCompare 或 CLI 的比较模式加载两个 .loli 文件,查看分配模式的差异。
  6. 脚本化 – 安装 agentcli 包(在 agentcli 目录内运行 pip install .),使用 loli 命令或导入库来查询 SQLite 快照。

哪些人可能用得上?

  • 需要理解原生内存使用情况、发现内存泄漏或优化分配模式的 Android 开发者。
  • 针对 Android 的 游戏开发者(文档包含与游戏引擎集成的部分)。
  • 希望并排比较两个构建版本或运行时配置的 性能工程师。
  • 构建围绕 Android 内存行为工具的研究人员;Python 代理使其易于编写自定义分析。

限制 / 注意事项

  • 仅捕获 原生 分配(C/C++);Java 层分配不在范围之内。
  • 符号解析需要应用的原生库以调试符号构建。
  • UI 依赖 Dear ImGui/SFML,因此仅在桌面操作系统上运行,无法直接在设备上运行。
  • 捕获开销非零;请留意“控制台”标签页的时间数据。

许可证与致谢

该项目采用 MIT 许可证(见 LICENSE)。它捆绑了多个宽松许可的第三方库(Dear ImGui、SFML、SQLite、LZ4 等),并基于 shuchangliu 的早期 loli_profiler 实现的分支构建。


以上所有信息均直接取自仓库的 README。

相关

  • 项目
  • 项目
  • 项目
  • 项目