Hyprland 崩溃后如何获取日志、Crash Report 和 coredump 用于报告问题?
2026/9/22 19:01:08 网站建设 项目流程

Hyprland 崩溃后如何获取日志、Crash Report 和 coredump 用于报告问题?

【免费下载链接】HyprlandHyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.项目地址: https://gitcode.com/GitHub_Trending/hy/Hyprland

当 Hyprland 崩溃后,向项目提交 issue 时,仅描述"崩溃了"是不够的。docs/ISSUE_GUIDELINES.md 要求崩溃类 bug 报告在常规的复现步骤、预期结果、实际结果之外,额外附上四样东西:Hyprland 日志、你的配置文件、Crash Report(v0.22.0beta 及以后版本)或 coredump / 带 stacktrace 的 coredump 分析(v0.21.0beta 及更早版本)。本文按版本分支给出这三种材料的获取命令,让你能对照文档把材料齐了再提交 issue。

另外有一条硬性前提:报告 bug 时不要使用任何发行版打包安装的 Hyprland,必须克隆源码并自行编译。打包版本与上游代码可能存在差异,排查结论会不可靠。

崩溃类 issue 需要准备的材料清单

在获取日志之前,先对照 docs/ISSUE_GUIDELINES.md 的 "Reporting bugs" 一节确认材料:

  • 必写项:复现步骤(Steps to reproduce)、预期结果(Expected outcome)、实际结果(Noted outcome);
  • 崩溃场景追加:Hyprland 日志、你的配置;
  • 按版本二选一:
    • v0.22.0beta 及以后:Crash Report 文件;
    • v0.21.0beta 及更早:coredump 或带 stacktrace 的 coredump 分析。

当前仓库的 VERSION 为 0.56.0,因此走 Crash Report 路径即可;coredumpctl 一节仅在调试更老版本时才需要。

获取 Hyprland 日志

$XDG_RUNTIME_DIR/hypr下的每个目录对应一次 Hyprland 会话,日志文件是会话目录里的hyprland.log(日志输出逻辑见 Logger.cpp)。按你当前所处的环境选择命令:

已在 TTY 中(崩溃后落回 TTY 的常见情况),且崩溃的会话是你最后一次启动的会话:

cat $XDG_RUNTIME_DIR/hypr/$(ls -t $XDG_RUNTIME_DIR/hypr | head -n 1)/hyprland.log

ls -t按修改时间排序,head -n 1取最新一次会话目录。

仍在一次 Hyprland 会话中,想取上一次(刚崩溃的)会话日志:

cat $XDG_RUNTIME_DIR/hypr/$(ls -t $XDG_RUNTIME_DIR/hypr | head -n 2 | tail -n 1)/hyprland.log

此时当前会话占据最新目录,所以要取时间排序的第二新目录。

两条命令的输出可以直接重定向到文件、复制保存,作为 issue 附件。

获取 Crash Report(v0.22.0beta 及以后)

崩溃发生后,报告目录按XDG_CACHE_HOME是否已设置二选一:

  • 已设置:$XDG_CACHE_HOME/hyprland
  • 未设置:$HOME/.cache/hyprland

目录中的文件名形如hyprlandCrashReport[XXXX].txt,其中[XXXX]崩溃进程的 PID(方括号只是文档中表示"此处是一个数字"的写法)。例如 PID 为 2891 时对应文件是hyprlandCrashReport2891.txt。把这个文件附到 issue 上。

判断依据来自实现:Crash Reporter 将报告写入XDG_CACHE_HOME/hyprland$HOME/.cache/hyprland并以hyprlandCrashReport<pid>.txt命名(CrashReporter.cpp),报告内容包含版本、系统信息、GPU、插件列表、Backtrace 和日志尾部。崩溃时 Hyprland 还会向 stderr 打印一行提示,例如:

Hyprland has crashed :( Consult the crash report at <路径> for more information.

如果崩溃发生在 TTY 上,这行提示可以直接告诉你要去哪个路径取文件。

获取 coredump(v0.21.0beta 及更早,systemd 环境)

这一段只适用于 v0.21.0beta 及更早版本,且系统使用 systemd 的 coredump 机制。

  1. 运行coredumpctl
coredumpctl
  1. 按 END 键跳到列表末尾,找到最后一次Hyprland条目,记下其 PID——即时间戳之后的第一个数字,文档示例中为2891

  2. Ctrl+C退出 coredumpctl,然后:

coredumpctl info 2891

2891替换成上一步记下的 PID。将输出中对应的 stacktrace 一并提供给 issue。

可选:用 debug 构建获取更详细的 coredump

如果常规材料还不够,文档提供了 debug coredump 路径:它能提供更多信息,可能加快修复速度。副作用说明:这条路径要求你在自己的源码检出目录里更新子模块、以 debug 模式重新编译、并在 TTY 中手动启动 Hyprland 复现崩溃,属于对本地开发目录和 TTY 会话有影响的操作。

按 docs/ISSUE_GUIDELINES.md 的 "Obtaining the debug Hyprland coredump" 一节执行:

  1. 确保在最新 git 代码上,先同步子模块:
git pull --recurse-submodules
  1. 以 debug 模式编译 Hyprland(可参考 Makefile 中的debug目标)。注意:debug 构建使用的配置文件是hyprlandd.lua而不是hyprland.lua,且日志文件名相应为hyprlandd.log

  2. cd ~回到主目录。

  3. 从 TTY 用以下命令启动([path/to/Hyprland]替换为你编译出的 Hyprland 可执行文件路径):

ASAN_OPTIONS="log_path=asan.log" ~/path/to/Hyprland
  1. 复现崩溃,Hyprland 会立即关闭。

  2. 回到~,找到形如asan.log.XXXXX的文件,其中XXXXX是崩溃的 Hyprland 实例的 PID。这个文件就是 debug coredump,附到 issue 上。

收尾:提交前检查

提交前对照一遍:复现步骤、预期/实际结果三项文字描述已写;hyprland.log(或 debug 构建下的hyprlandd.log)已保存;配置文件已附上;按你的版本附上了hyprlandCrashReport[PID].txt或 coredump 的 stacktrace;并且所用 Hyprland 是源码编译而非发行版包。材料齐备后提交 issue,即可结束本次崩溃报告流程。

【免费下载链接】HyprlandHyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.项目地址: https://gitcode.com/GitHub_Trending/hy/Hyprland

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询