在Emacs中分析Shell命令

时间:2019-05-21 09:16:50

标签: shell emacs profiling profiler

有没有一种方法可以分析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限制的东西。

1 个答案:

答案 0 :(得分:2)

请注意,profiler.el是采样分析器。如果您对挂墙时间感兴趣,则可能要尝试使用诸如elp.el之类的分析探查器。

在您的情况下,您可能希望通过使用 Mx magit RET elp-instrument-package RET 。运行了magit命令后,您可以使用 M-x magit RET 查看结果。

对于elp-results,您可能会发现函数magit占用了大量时间。为了进一步研究特定的函数调用,您可以通过如下方式简单地对该函数或任何其他函数进行检测:向每个单独的函数调用添加记录运行时的建议函数以及该函数的参数到消息缓冲区中。

magit-process-file