Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New release: v0.14 #1714

Merged
merged 1 commit into from Jun 20, 2023
Merged

New release: v0.14 #1714

merged 1 commit into from Jun 20, 2023

Commits on Jun 20, 2023

  1. uftrace: Release v0.14

    This is a new release with some interesting changes!
    
    The first thing is Python language support.  Now uftrace can trace python
    functions and methods like C/C++ functions.  Internally, it uses python's
    sys.setprofile() and pass the entry/exit info to the libmcount.
    
    For example, it can trace the following python script (it needs to be a
    standalone executable - it should have #! line and executable permission).
    
        $ cat abc.py
        #! /usr/bin/python3
        def a(): b()
        def b(): c()
        def c(): print("Hello")
        if __name__ == '__main__':
            a()
    
        $ chmod +x abc.py
    
    Then uftrace can trace the functions like below:
    
        $ uftrace abc.py
        Hello
        # DURATION     TID     FUNCTION
                    [235209] | __main__.<module>() {
                    [235209] |   a() {
                    [235209] |     b() {
                    [235209] |       c() {
          10.810 us [235209] |         builtins.print();
          14.926 us [235209] |       } /* c */
          16.628 us [235209] |     } /* b */
          18.867 us [235209] |   } /* a */
          22.000 us [235209] | } /* __main__.<module> */
    
    Not all features work well with python scripts, but filters by name (-F
    and -N), depth (-D), time (-t), location (-L) would work.  However you
    can use full features for analysis after recording the data.
    
    The next is the improved agent control.  The agent listens to a client
    connection in background when started with -g option.  Then users can
    connect to it with uftrace live using -p <PID> option.  The <PID> should
    be a process ID of the target, not the uftrace itself.
    
    Say we want to trace my program with a filter at first.  Please don't
    forget to start an agent.
    
        $ uftrace record -g -F ^mycode -- myprog
    
    Later we don't want to use the function filter anymore, and decided to use
    a time filter instead.  Let's change the option for the uftrace record
    like below:
    
        $ uftrace -p $(pidof myprog) -F ^mycode@clear -t 100us
    
    Note that the above command would not produce any data and just pass the
    new options to the existing uftrace record session (for myprog).
    
    One more big thing is Android build support.  While it's not officially
    supported, you can build uftrace as an external tool.  This needed various
    improvements in terms of portability like abstracting shmem access and
    better handling of the tmp directory and dynamic linker behaviors.
    
    It has been tested with Android 9+ on AArch64 and x86_64.  You probably
    want to use dynamic tracing due to issues with the Android runtime.
    Please see INSTALL.md for the details.
    
    The size filter at replay now works as same as record, since the symbol
    file format was changed to save the symbol size as well.
    
    Symbol demangling on Rust programs was improved to handle trait names in a
    more compact way.  The new demangling scheme (v0) is not supported yet.
    
    There are also more fixes and improvements.  Thank you contributors!
    
    Signed-off-by: Namhyung Kim <namhyung@gmail.com>
    namhyung committed Jun 20, 2023
    Configuration menu
    Copy the full SHA
    0d301e0 View commit details
    Browse the repository at this point in the history