
Xdebug 本身不支持直接导出性能分析报告为 PDF 或图片——它只生成 cachegrind.out.* 格式的文本文件(符合 KCachegrind / QCacheGrind 规范),后续可视化和导出依赖外部工具。别在 php.ini 里找 xdebug.export_to_pdf 这种不存在的配置项。
用 KCachegrind / QCacheGrind 打开并截图
这是最轻量、最常用的路径,适合快速定位热点函数:
KCachegrind(Linux)或 QCacheGrind(macOS/Windows)是专为解析 cachegrind.out.* 设计的 GUI 工具,能展开调用树、按耗时/内存排序、高亮瓶颈函数打开后,点击顶部菜单 File → Export → PNG(QCacheGrind 支持导出为 PNG;KCachegrind 原生不支持,需用系统截图工具)若要导出为 PDF:先导出为 PNG,再用系统自带的“打印为 PDF”功能(如 macOS 的预览 → 文件 → 导出为 PDF;Windows 的“Microsoft Print to PDF”)注意:导出前建议在 View → Details 中勾选 “Show callers/callees”,否则截图可能丢失关键调用上下文
用 PhpStorm 内置分析器导出 SVG/PNG
如果你用 PhpStorm 开发,它内置了对 Xdebug 性能快照的可视化支持,且导出能力比命令行工具更友好:
确保已启用 Xdebug profiler 并生成了 cachegrind.out.* 文件(路径由 xdebug.output_dir 指定)在 PhpStorm 中,选择 Tools → Analyze Xdebug Profiler Snapshot…,选中对应文件加载后,右键调用图任意空白处 → Export as SVG(支持矢量缩放);也可用系统截图快捷键截取当前视图为 PNG不支持直接导出 PDF,但 SVG 可用浏览器打开后另存为 PDF,或通过 Inkscape 等工具转换优势在于能关联源码跳转,点击函数名直接打开对应 .php 行号,调试效率更高
为什么不能用浏览器打开 cachegrind.out.* 后另存为 PDF?
因为 cachegrind.out.* 是纯文本格式,含大量注释、调用关系和数字指标,没有布局信息:
直接丢进浏览器会显示为无格式乱码,CSS 无法可靠控制函数层级缩进和颜色映射试图用 highlight.php 或自定义 HTML 渲染器解析并美化,成本远高于用现成 GUI 工具某些在线解析器(如 cachegrind-viewer)可生成 HTML 报告,但导出 PDF 仍依赖浏览器打印,字体/分页/折叠状态常丢失真正稳定的 PDF 输出必须基于结构化渲染(如 Qt 的 QPainter 或 PHP 的 dompdf),而这些不在 Xdebug 职责范围内
真正卡住人的地方不是“怎么导出”,而是导出前没确认 cachegrind.out.* 文件是否真实包含有效数据——比如 xdebug.mode=profile 拼错成 profiler,或 xdebug.output_dir 目录不可写导致静默失败。先 ls -l /tmp/xdebug_profiles/ 看文件大小,0 字节就别折腾导出了。

评论(0)