有没有一种方法可以分析emacs中对shell命令的阻塞时间?考虑以下程序:
(profiler-start 'cpu)
(shell-command "sleep 3")
(profiler-report)
(profiler-stop)
探查器报告将如下所示:
- command-execute 371 95%
- call-interactively 371 95%
- funcall-interactively 329 84%
- execute-extended-command 175 44%
- execute-extended-command--shorter 157 40%
- completion-try-completion 149 38%
- completion--nth-completion 149 38%
- completion--some 143 36%
- #<compiled 0x438307f1> 143 36%
- completion-pcm-try-completion 102 26%
- completion-pcm--find-all-completions 98 25%
completion-pcm--all-completions 98 25%
+ completion-pcm--merge-try 4 1%
completion-basic-try-completion 41 10%
+ sit-for 16 4%
- eval-expression 154 39%
- eval 154 39%
- profiler-start 154 39%
- debug 154 39%
- recursive-edit 141 36%
- command-execute 114 29%
- call-interactively 114 29%
- byte-code 107 27%
+ read--expression 64 16%
+ read-extended-command 43 11%
+ funcall-interactively 7 1%
+ byte-code 42 10%
+ ... 19 4%
如您所见,花费的时间或多或少是均匀分配的。我有兴趣看到输出告诉我,我在shell命令sleep 3
上花费了大部分程序阻塞,这是否有可能?我知道sleep 3
在我的CPU上并不繁重-但是我试图弄清楚从magit
调用了哪些shell命令会花费很长时间-所以我也很感兴趣受到IO限制的东西。
答案 0 :(得分:2)
请注意,profiler.el
是采样分析器。如果您对挂墙时间感兴趣,则可能要尝试使用诸如elp.el
之类的分析探查器。
在您的情况下,您可能希望通过使用 Mx magit
RET elp-instrument-package
RET 。运行了magit命令后,您可以使用 M-x magit
RET 查看结果。
对于elp-results
,您可能会发现函数magit
占用了大量时间。为了进一步研究特定的函数调用,您可以通过如下方式简单地对该函数或任何其他函数进行检测:向每个单独的函数调用添加记录运行时的建议函数以及该函数的参数到消息缓冲区中。
magit-process-file