You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何指定GHC性能分析输出文件的存储目录(Stack+Windows/Linux)

解决方法:指定性能分析文件的输出目录

这个问题我之前也碰到过,默认输出到当前工作目录确实很容易踩权限坑,还好GHC的RTS选项支持直接指定这些性能分析文件的输出路径,有几种实用的解决方式:

1. 修改.cabal中的RTS选项(硬编码固定路径)

你可以直接在-with-rtsopts参数里,给每个输出文件指定完整的目标路径。GHC的RTS选项对不同类型的分析文件有不同的路径设置方式:

  • 对于.prof文件(由-p参数生成):把-p改成-p/your/target/dir/MyApplication,GHC会自动在路径后追加.prof后缀,最终生成/your/target/dir/MyApplication.prof
  • 对于.hp文件(由-h参数生成):把-h改成-h/your/target/dir/MyApplication,直接生成/your/target/dir/MyApplication.hp
  • 对于日志文件(由-s和-S参数生成):直接把文件名替换成带路径的完整名称,比如-s/your/target/dir/MyApplication-s.log和-S/your/target/dir/MyApplication-S.log

修改后的ghc-options示例:

ghc-options: -Wall -O2 -threaded -prof -fprof-auto -rtsopts -fprof-cafs "-with-rtsopts=-N -s/tmp/MyApplication-s.log -h/tmp/MyApplication.hp -i0.1 -p/tmp/MyApplication -M1G -S/tmp/MyApplication-S.log"

注意:请把/tmp/替换成你实际有权限写入的目录(比如用户主目录下的~/profiles/),并且要确保这个目录已经存在,否则GHC会报错无法创建文件。

2. 运行时动态指定RTS选项(更灵活适配多环境)

如果不想在.cabal里硬编码路径,你可以在运行程序时手动传递RTS选项,覆盖cabal中的默认配置。这种方式适合跨Windows/Linux不同环境的场景:

  • 直接运行编译好的二进制文件时:
./path/to/your/exe +RTS -N -s/path/to/MyApplication-s.log -h/path/to/MyApplication.hp -i0.1 -p/path/to/MyApplication -M1G -S/path/to/MyApplication-S.log -RTS
  • 用Stack直接运行项目时:
stack run -- +RTS -N -s/path/to/MyApplication-s.log -h/path/to/MyApplication.hp -i0.1 -p/path/to/MyApplication -M1G -S/path/to/MyApplication-S.log -RTS

额外提示

  • 无论用哪种方式,都要确保指定的目录存在且程序有写入权限,否则还是会出现“Can't open ... file...”错误
  • 注意-p选项的路径是文件前缀,GHC会自动添加.prof后缀;而-h、-s、-S是直接指定完整文件名,记得带上对应的后缀

内容的提问来源于stack exchange,提问作者RandomB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:51:51