zoukankan      html  css  js  c++  java
  • End-to-End Tracing of Ajax/Java Applications Using DTrace

    End-to-End Tracing of Ajax/Java Applications Using DTrace

    Category: Utility

    We posted about using DTrace to profile Firefox in the past, and

    today Amit Hurvitz published a piece on Ajax, DTrace and Where They Meet.

     
    JAVASCRIPT
     
    1. #!/usr/sbin/dtrace -Zs
    2.  
    3. #pragma D option quiet
    4. #pragma D option switchrate=10
    5.  
    6. dtrace:::BEGIN
    7. {
    8.         jsIndent = 0;
    9.         jsFile = "ajax-validation";
    10.         javaMethodBoundary= "doGet";
    11.         startTimestamp = timestamp;
    12. }
    13.  
    14. *mozilla$1:::js_function-entry
    15. /basename(copyinstr(arg0)) == jsFile/
    16. {
    17.         jsIndent += 2;
    18.         printf("%*s -> %s:%s (JavaScript)(elapsed ms: %d) ", jsIndent, "",
    19.             jsFile, copyinstr(arg2), (timestamp - startTimestamp) / 1000);
    20. }
    21.  
    22. *mozilla$1:::js_function-return
    23. /basename(copyinstr(arg0)) == jsFile/
    24. {
    25.         printf("%*s < - %s:%s (JavaScript)(elapsed ms: %d) ", jsIndent, "",
    26.             jsFile, copyinstr(arg2), (timestamp - startTimestamp) / 1000);
    27.         jsIndent -= 2;
    28. }
    29.  
    30.  
    31. hotspot$2:::method-entry
    32. {
    33.         self->strPtr = (char *)copyin(arg1, args[2]+1);
    34.         self->strPtr[(int)args[2]] = '';
    35.         self->classStr = (string)self->strPtr;
    36.         self->strPtr = (char *)copyin(arg3, (int)args[4]+1);
    37.         self->strPtr[(int)args[4]] = '';
    38.         self->methodStr = (string)self->strPtr;
    39. }
    40.  
    41. hotspot$2:::method-entry
    42. /javaMethodBoundary == self->methodStr/
    43. {
    44.         self->interested = 1;
    45.         self->indent = 0;
    46. }
    47.  
    48. hotspot$2:::method-entry
    49. /self->interested/
    50. {
    51.         self->indent += 2;
    52.         printf("%*s -> %s:%s (Java)(elapsed ms: %d) ", self->indent, "",
    53.             self->classStr, self->methodStr, (timestamp - startTimestamp) / 1000);
    54. }
    55.  
    56. hotspot$2:::method-return
    57. {
    58.         self->strPtr = (char *)copyin(arg1, args[2]+1);
    59.         self->strPtr[(int)args[2]] = '';
    60.         self->classStr = (string)self->strPtr;
    61.         self->strPtr = (char *)copyin(arg3, (int)args[4]+1);
    62.         self->strPtr[(int)args[4]] = '';
    63.         self->methodStr = (string)self->strPtr;
    64. }
    65.  
    66. hotspot$2:::method-return
    67. /self->interested/
    68. {
    69.         printf("%*s < - %s:%s (Java)(elapsed ms: %d) ", self->indent, "",
    70.             self->classStr, self->methodStr, (timestamp - startTimestamp) / 1000);
    71.         self->indent -= 2;
    72. }
    73.  
    74. hotspot$2:::method-return
    75. /javaMethodBoundary == self->methodStr/
    76. {
    77.         self->interested = 0;
    78.         /* exit(0); */
    79. }

    It then continues to show timings of methods and such. This may not be the simplest solution for debugging, but at least you can get inside the black box when you need too.

  • 相关阅读:
    喵哈哈村的魔法考试 Round #1 (Div.2) 题解
    Codeforces Round #398 (Div. 2) A. Snacktower 模拟
    Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) F. Souvenirs 线段树套set
    视频人脸检测——Dlib版(六)
    pip/pip3更换国内源
    OpenCV添加中文(五)
    图片人脸检测——Dlib版(四)
    视频人脸检测——OpenCV版(三)
    Tesseract Ocr文字识别
    图片人脸检测——OpenCV版(二)
  • 原文地址:https://www.cnblogs.com/zengkefu/p/7502498.html
Copyright © 2011-2022 走看看