美文网首页
dynamic trace system: xray

dynamic trace system: xray

作者: 413x | 来源:发表于2020-01-10 14:49 被阅读0次

    dynamic trace system: xray

    官方简介见: https://llvm.org/docs/XRay.html
    官方用法见: https://llvm.org/docs/XRayExample.html

    xray简介

    xray由google添加到llvm,用于生产环境中的函数调用追踪工具。我认为这个工具的trace能力能极大方便我们理解开源代码,所以有了这篇博客。

    用法

    为了记录关键代码,仅记录函数中指令较多的函数(指令数200以上),默认使用-fxray-instrument,若要调整限额,使用-fxray-instruction-threshold=1,
    若要在源码级控制那些函数不纪录,那些记录,可以使用attribute,具体参见文档:

    [[clang::xray_always_instrument]] void always_instrumented();
    [[clang::xray_never_instrument]] void never_instrumented();
    

    缺点

    xray对动态库的支持并不好,按照文档对poppler进行编译

    #!/bin/bash
    OUT_DIR=xray-build
    rm -rf $OUT_DIR 
    mkdir $OUT_DIR
    cd $OUT_DIR
    cmake ../poppler \
            -DCMAKE_CXX_COMPILER=/home/tools/clang/current_clang/bin/clang++ \
            -DCMAKE_C_COMPILER=/home/tools/clang/current_clang/bin/clang \
        -DCMAKE_BUILD_TYPE=Release \
            -DCMAKE_C_FLAGS="-g -O0 -fxray-instrument -fxray-attr-list=/home/SourceCode/poppler/poppler-master/xray-attr-list.txt " \
            -DCMAKE_CXX_FLAGS="-g -O0 -fxray-instrument -fxray-attr-list=/home/SourceCode/poppler/poppler-master/xray-attr-list.txt "
    make -j8
    

    运行:

    XRAY_OPTIONS="patch_premain=true xray_mode=xray-basic verbosity=1 xray_logfile_base=./log.xray-" XRAY_BASIC_OPTIONS="func_duration_threshold_us=0" ./poppler_qt5viewer ~/Documents/Pdf/PLRM.pdf
    

    解析:

    llvm-xray  stack  -instr_map=../../libpoppler.so ./log.xray-poppler_qt5viewer.XCHkxB
    

    解析结果缺失了很多函数。

    相关文章

      网友评论

          本文标题:dynamic trace system: xray

          本文链接:https://www.haomeiwen.com/subject/vmopactx.html