Ltrace

Stable: 02.11.2022 - 13:02 / Revision: 02.11.2022 - 13:01

I am here to prevent the first-page-empty bug!

1 Article purpose

This article provides the basic information needed to start using the Linux tool: ltrace[1].

2 Introduction

The following table provides a brief description of the tool, as well as its availability depending on the software packages:

Yes: this tool is either present (ready to use or to be activated), or can be integrated and activated on the software package.

No: this tool is not present and cannot be integrated, or it is present but cannot be activated on the software package.

Tool STM32MPU Embedded Software distribution STM32MPU Embedded Software distribution for Android™
Warning white.png Warning
STM32MPU Embedded Software distribution for Android™ is no more supported by ST. You can contact our ST partner, Witekio, who can help you to port and maintain it on STM32MP15 platform.
Name Category Purpose Starter Package Developer Package Distribution Package Starter Package Developer Package Distribution Package
ltrace Tracing tools ltrace[1] is used to display the calls to shared libraries made by a userspace application. ltrace is a userspace application.

Its use is very similar to strace.

No No Yes No No No

3 Installing the trace and debug tool on your target board

3.1 Using the STM32MPU Embedded Software distribution

ltrace is not part of the standard STM32MPU Embedded Software distribution image.


3.1.1 Distribution Package

To include ltrace in your Distribution Package image build, please follow steps below:

  • Add ltrace package for the image building
 cd <your_Distribution_Package_root_dir>
 echo 'IMAGE_INSTALL_append += "ltrace"' >> layers/meta-st/meta-st-openstlinux/recipes-st/images/st-image-weston.bbappend
  • Rebuild your full image
 bitbake <full_image_name> # Needed to include ltrace into the final image rootfs

4 Getting started

To use ltrace, there are two main methods:

  • by giving, as parameter, the name of program for which you want to list dynamic library calls, and its arguments if required:
 ltrace <Program> [ARGS]
As example:
 ltrace weston-simple-egl
__libc_start_main(0x11a90, 1, 0xbec45d04, 0x131f0 <unfinished ...>
memset(0xbec456f8, 0, 72, 0x11a90)                                             = 0xbec456f8
memset(0xbec45754, 0, 68, 0xbec45740)                                          = 0xbec45754
wl_display_connect(0, 250, 32, 0xbec45750)                                     = 0x26150
wl_proxy_marshal_constructor(0x26150, 1, 0x24e90, 0)                           = 0x2a268
wl_proxy_add_listener(0x2a268, 0x132e0, 0xbec456f8, 0)                         = 0
wl_display_roundtrip(0x26150, 0x132e0, 0xbec456f8, 0 <unfinished ...>
strcmp(0x2a404, 0x133e8, 1, 0x2a404)                                           = 0
wl_proxy_marshal_constructor_versioned(0x2a268, 0, 0x24ed8, 1)                 = 0x2b070
strcmp(0x2a49c, 0x133e8, 2, 0x2a49c)                                           = 16
strcmp(0x2a49c, 0x133f8, 115, 0x635f6c77)                                      = -3
...
  • by giving, as parameter, the PID of the process to be studied:
 ltrace -p <PID>

Note: <PID> value can be replace by `pidof <process_name>`

As example:
 weston-simple-egl & ltrace -p `pidof weston-simple-egl`
has EGL_EXT_buffer_age and EGL_EXT_swap_buffers_with_damage
glGetShaderiv(1, 0x8b81, 0xbee14260, 0)                                        = 0
glCreateShader(0x8b31, 0x8b31, 256, 1)                                         = 2
glShaderSource(2, 1, 0xbee1425c, 0)                                            = 0x1a96f0
glCompileShader(2, 0, 154, 0xbee14260)                                         = 1
glGetShaderiv(2, 0x8b81, 0xbee14260, 0)                                        = 0
glCreateProgram(2, 2, 256, 1)                                                  = 3
glAttachShader(3, 1, -1, 1)                                                    = 0
glAttachShader(3, 2, 0x8b30, 1)                                                = 0
glLinkProgram(3, 0x8dd9, 0x8b31, 1)                                            = 0x285234
glGetProgramiv(3, 0x8b82, 0xbee14698, 0)                                       = 0
glUseProgram(3, 3, 256, 1)                                                     = 1
glBindAttribLocation(3, 0, 0x13884, 1)                                         = 1
glBindAttribLocation(3, 1, 0x13888, 0)                                         = 1
glLinkProgram(3, 0x1388e, 0, 0x1b9090)                                         = 1
...

 killall weston-simple-egl

5 To go further

Other options can be set. For details, please refer to the manual page[2].

6 References


  • Useful external links
Document link Document Type Description
ltrace linux.die.net Standard linux.die.net
ltrace wikipedia.org Standard wikipedia.org
ltrace tutorial User Guide go4expert.com
ltrace training


Training ellexus.com


IMPORTANT NOTICE – READ CAREFULLY
STMicroelectronics NV and its subsidiaries ("ST") reserve the right to make changes, corrections, enhancements, modifications, and improvements to ST products and/or to this document at any time without notice. Purchasers should obtain the latest relevant information on ST products before placing orders. ST products are sold pursuant to ST’s terms and conditions of sale in place at the time of order acknowledgment.

Purchasers are solely responsible for the choice, selection, and use of ST products and ST assumes no liability for application assistance or the design of purchasers’ products.

No license, express or implied, to any intellectual property right is granted by ST herein.

Resale of ST products with provisions different from the information set forth herein shall void any warranty granted by ST for such product.

ST and the ST logo are trademarks of ST. For additional information about ST trademarks, refer to www.st.com/trademarks. All other product or service names are the property of their respective owners.

Information in this document supersedes and replaces information previously supplied in any prior versions of this document.