Ltrace

来自百问网嵌入式Linux wiki

Ltrace

文章目的

本文提供了开始使用Linux工具所需的基本信息:ltrace [1 ]。

简介

下表简要介绍了该工具及其可用性,具体取决于软件包:
  • 是:该工具已经存在(可以使用或激活),也可以在软件包中集成和激活。
  • 没有:该工具不存在且无法集成,或者存在但无法在软件包中激活。
工具
名称 类别 目的
ltrace 追踪工具 ltrace [1 ]用于显示对用户空间应用程序进行的共享库的调用。ltrace是一个用户空间应用程序。它的用法与strace 非常相似。
STM32MPU嵌入式软件发行版
入门资料包 开发者资料包 发行版资料包
没有 没有
适用于 Android 的STM32MPU嵌入式软件发行版
入门资料包 开发者资料包 发行版资料包
没有 没有 没有


在目标板上安装跟踪和调试工具

使用STM32MPU嵌入式软件发行版

模板:Redtex

分发包

要将 ltrace 合入到你的分发包镜像版本中,请按照以下步骤进行操作:
添加ltrace软件包以构建镜像
	PC $> cd <your_Distribution_Package_root_dir>
	PC $> echo 'IMAGE_INSTALL_append += "ltrace"' >> layers/meta-st/meta-st-openstlinux/recipes-st/images/st-image-weston.bbappend
重建完整的镜像
	PC $> bitbake <full_image_name> # Needed to include ltrace into the final image rootfs
在板上重新加载新镜像:请参见刷新生成的镜像

使用入门

要使用ltrace,有两种主要方式:
1、提供你要为其列出动态库调用的程序的名称作为参数,并在需要时为其提供参数作为参数运行:
	Board $> ltrace <Program> [ARGS]
例如:
	Board $> 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
	...
2、给出要研究的过程的 <PID> 作为参数:
	Board $> ltrace -p <PID>
注意:<PID>值可以由`pidof <process_name>`代替
例如:
	Board $> 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
	...

	Board $> killall weston-simple-egl

深入学习

可以设置其他选项。有关详细信息,请参见手册页[2 ]。

参考

1. https://www.ltrace.org/
2. http://man7.org/linux/man-pages/man1/ltrace.1.html
  • 有用的外部链接
文件链接 文件类型 描述
ltrace linux.die.net 标准 linux.die.net
ltrace wikipedia.org 标准 wikipedia.org
ltrace教程 用户指南 go4expert.com
跟踪培训 训练 ellexus.com