几天前我开始尝试使用stuck,现在我被profiler卡住了。
我要分析的函数名为my-fn。
我尝试的第一件事是包含(require profile),然后调用(profile-thunk (thunk (my-fn arg1)))。
当我在DrRacket中点击run按钮时,它显示
Profiling results
-----------------
Total cpu time observed: 0ms (out of 2ms)
Number of samples taken: 0 (once every 0ms)
====================================
Caller
Idx Total Self Name+srcLocal%
ms(pct) ms(pct) Callee
====================================然后打印my-fn的返回值。
然后,我尝试通过在参数中为函数提供更多项来使函数变慢,并将#:repeat选项添加到分析器中。
(profile-thunk (thunk (my-fn arg1)) #:repeat 5000)
现在的结果是:
Profiling results
-----------------
Total cpu time observed: 29488ms (out of 31641ms)
Number of samples taken: 1687 (once every 17ms)
====================================
Caller
Idx Total Self Name+srcLocal%
ms(pct) ms(pct) Callee
====================================这似乎做了一些好事,但我仍然看不到结果。
然后我尝试使用命令行(在将raco添加到%PATH%之后)
raco profile .\test.rkt
但我还是什么都没得到:
Profiling results
-----------------
Total cpu time observed: 234ms (out of 281ms)
Number of samples taken: 4 (once every 59ms)
====================================
Caller
Idx Total Self Name+srcLocal%
ms(pct) ms(pct) Callee
====================================我没有想法了,所以谁能分享一下正确的方法,好吗?
顺便提一下,在DrRacket中,分析器的结果可以在函数的返回值之后吗?我的是一个很长的数字列表,我需要向上滚动才能看到(空的)分析器结果。(它不是在命令行上发生的,所以不是很重要)
谢谢
另外,我还尝试用(require profile/render-text)更改渲染器
和then (profile-thunk (thunk (my-fn arg1)) #:repeat 5000 #:renderer render)
或then (profile-thunk (thunk (my-fn arg1)) #:repeat 5000 #:renderer text:render)
或then (profile-thunk (thunk (my-fn arg1)) #:repeat 5000 #:renderer #'render)
但是我得到了关于renderer不是一个函数的错误消息。
发布于 2018-10-30 05:55:02
不完全是我所希望的,但我在mailing list中找到了一个修复程序。
要在DrRacket中启用性能分析,请执行以下操作:
并单击右上角的
profiling“。(默认设置似乎仅为调试)
然后在控制台中或使用" run“按钮运行一些代码,然后:
在屏幕的底部,会显示个人资料信息。据我所知,它不能很好地处理线程(为线程连接命令touch的行打印<<unknown>>37:28 ),但总比根本没有分析器要好。
我仍然没有解决为什么我不能得到profile-thunk函数或profile宏,或raco的profile命令的工作,但它可能与windows或我的安装?
https://stackoverflow.com/questions/53035715
复制相似问题