如何使用Stack构建支持性能分析(Profiling)的程序?解决执行+RTS -p时的报错问题
解决Stack构建Profiling应用时的
-p requires -prof报错问题 你遇到的核心问题主要是参数传递方式错误,再加上可能存在旧构建缓存的干扰。我来一步步帮你排查解决:
1. 修复stack exec的参数分隔逻辑
你执行的stack exec prof-exe +RTS -p里,Stack会把+RTS -p误认为是自己的命令参数,而不是传递给prof-exe的运行时参数。这就导致Stack错误判断你在给它传-p flag,从而抛出报错。
正确的命令需要用--分隔Stack自身参数和目标程序的参数:
stack exec -- prof-exe +RTS -p
2. 清理旧构建缓存(推荐操作)
如果之前有过非Profiling模式的构建记录,Stack可能会复用旧的编译产物,导致Profiling支持没有正确生效。先清理缓存再重新构建:
stack clean stack build --profile --executable-profiling --library-profiling
其实--profile参数已经默认包含了库和可执行文件的Profiling启用,所以也可以简化成:
stack build --profile
3. 验证Profiling构建结果
构建完成后,你可以检查生成的可执行文件是否带有Profiling信息。在项目目录下执行:
find .stack-work -name "prof-exe" -type f | xargs file
如果输出里包含with debug_info或明确提到profiling,说明构建是符合要求的。
按照上面的步骤操作后,就能正常生成性能分析报告(当前目录会生成prof-exe.prof文件)。
内容的提问来源于stack exchange,提问作者Daniil Iaitskov
相关产品推荐
相关产品推荐

