跟踪对共享库的调用

2023-12-24

我正在Linux下开发一个程序。

出于调试目的,我想跟踪从程序到某个(最好是共享)库的所有调用。 (我不想跟踪库内发生的调用。)

对于系统调用,有 strace。是否有任何工具可以跟踪对共享库的调用?


您正在寻找的工具称为ltrace。它允许跟踪从程序到所有(或一组给定)库的任何调用。

例如,以下调用将列出对共享库加载的外部函数的所有调用:

$> ltrace ls /
__libc_start_main(0x4028c0, 2, 0x7fff1f4e72d8, 0x411e60 <unfinished ...>
strrchr("ls", '/')                               = nil
setlocale(LC_ALL, "")                            = "en_US.UTF-8"
bindtextdomain("coreutils", "/usr/share/locale") = "/usr/share/locale"
textdomain("coreutils")                          = "coreutils"
__cxa_atexit(0x40a200, 0, 0, 0x736c6974756572)   = 0
isatty(1)                                        = 0
getenv("QUOTING_STYLE")                          = nil
getenv("COLUMNS")                                = nil
ioctl(1, 21523, 0x7fff1f4e6e80)                  = -1
getenv("TABSIZE")                                = nil
getopt_long(2, 0x7fff1, "abcdfghiklmnopqrstuvw:xABCDFGHI:"..., 0x413080, -1) = -1
...
+++ exited (status 0) +++

如果您想专注于某个特定的库,那么您应该使用--library=pattern option:

-l, --library library_pattern
    Display only calls to functions implemented by libraries that match
    library_pattern. Multiple library patterns can be specified with several
    instances of this option. Syntax of library_pattern is described in 
    section FILTER EXPRESSIONS.

    Note that while this option selects calls that might be directed to the 
    selected libraries, there's no actual guarantee that the call won't be 
    directed elsewhere due to e.g. LD_PRELOAD or simply dependency ordering.
    If you want to make sure that symbols in given library are actually called,
    use -x @library_pattern instead.

因此,例如,获取调用列表libselinux.so.1是这样完成的:

$ ltrace -l libselinux.so.1 ls /
ls->freecon(0, 0xffffffff, 0x7f78c4eee628, 0)                           = 0
bin dev media root sbin sys usr boot etc home lib lost+found proc run tmp
+++ exited (status 0) +++

仅调用一次该函数freecon()本次运行中被取出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跟踪对共享库的调用 的相关文章

  • 用于构建共享库的“soname”选项有什么用?

    我学到了 程序库指南 http tldp org HOWTO Program Library HOWTO 它提到使用soname像下面这样管理版本 gcc shared fPIC Wl soname libfoo so 1 o libfoo
  • Dylibs 是否在 iOS Appstore 应用程序中?

    在 2021 年 iOS 11 及更高版本中 应用程序商店是否仍然拒绝在审核阶段通过 dlopen 发布和使用 dylib 的应用程序 我环顾四周 没有找到任何新的答案或明确的答案 我也发现了这个https developer apple
  • 如何调查 imp.load_module 上的 python2 段错误

    我正在尝试安装和使用dolfin https aur archlinux org packages dolfin bzr 在 Arch Linux 上 使用 Python 2 7 3 找出导致分段的原因的最佳方法是什么 诸如此类的故障 py
  • “sys.settrace”在 Python 3.5 中可以正常工作,但在 Python 3.6 中不能正常工作吗?

    在尝试回答另一个问题时 我突然意识到 当理论上您不应该拥有控制权时 您可以在线程中随时运行代码 CPython 有一个settrace用于在代码中注册跟踪函数的函数 为了通过使用类来测试这个想法 编写了以下代码 问题是跟踪似乎没有发生 并且
  • TFDMoniFlatFileClientLink 不规则地不跟踪到文件

    我有一个TFDMoniFlatFileClientLink在表单上 文件名设置为d temp monitor txt 追踪 真 TFDConnection Params MonitorBy mbFlatFile 这有时有效 有时则不跟踪任何
  • Netbeans 7.1.1 中的增强

    尝试运行以下命令 include
  • 通过环境变量告诉 ld 在哪里查找目录

    我正在对课程的 C 和 C 文件进行评分 并且此作业使用 GSL 库 由于我的计算机没有 root 权限 因此我的 GSL 库安装在我的主目录中 因此我需要告诉编译器和链接器在哪里可以找到它 当我自己编写程序时 这不是问题 因为我只需向 g
  • gcc 4.5 中在链接方面引入的更改?

    我有一个项目生成一个共享库 该库与另一个共享库链接 当我用 gcc 4 4 编译并链接它时 一切正常 没有编译时警告或错误 没有链接时间警告或错误并且 ldd libmyproject so正确报告与其他共享库的依赖关系 另一方面 当我用
  • 从该共享库中查找加载的共享库的位置?

    从共享库中的函数 在正在运行的进程 用 C 编写 内 我如何发现该共享库是从哪里加载的 我找到的所有答案都涉及使用诸如ldd在命令行中 或者通过查看 proc self maps 在 Win32 上 我只需使用GetModuleFileNa
  • C++ 将枚举值捕获为异常

    我正在尝试使用external C 库将其异常定义为 enum MY ERRORS ERR NONE 0 ERR T1 ERR T2 然后在代码中抛出异常是这样的 if throw ERR T1 作为 C 编程新手 我会这样做 try ca
  • 跟踪 pthread 调度

    我想做的是创建某种图表 详细说明 Linux 中 两个 线程的执行情况 我不需要查看线程的作用 只需查看它们何时被安排以及持续多长时间 基本上是一条时间线 在过去的几个小时里 我一直在互联网上搜索跟踪 pthread 调度的方法 不幸的是
  • 如何确保 numpy BLAS 库可用作动态加载库?

    The theano安装文档 http www deeplearning net software theano install html troubleshooting make sure you have a blas library指
  • 使用 g++ 从 cpp 文件和静态库创建共享库 [重复]

    这个问题在这里已经有答案了 就像标题所说 我想从三个 cpp 文件和一些静态库创建共享库 基本上我想这样做 g libProject so file1 cpp file2 cpp file3 cpp I usr local include
  • 在 Eclipse 中的调试会话期间记录所有跟踪信息

    我想记录调试会话的每个步骤的所有调试信息 以便稍后处理所有这些数据 例如调用的方法的名称 参数值 所有变量值等 有没有任何选项可以实现此目的 我应该在哪里更改代码才能实现此目的 一件重要的事情 它不是一个 java 程序 这是一个使用 ac
  • 使用 Gas 生成与位置无关的代码 (-fPIC)

    我尝试在 x86 64 上创建共享库但失败 问题归结为以下代码 请不要介意 它没有多大意义 section data newline ascii n section text globl write newline type write n
  • 将跟踪消息获取到来自控制器的失败请求跟踪中

    在 ASP NET MVC Preview 5 上 我们无法从全局或控制器获取任何跟踪消息以显示在页面 视图 或失败请求跟踪 FREB 中 这些调用都不能在控制器操作中工作 HttpContext Trace Write hello Sys
  • 替代(免费)AOP PostSharp 用于方法跟踪(和异常)

    我喜欢添加跟踪类中每个方法的进入和离开 并在发生异常时跟踪参数 使用 PostSharp AOP 我不需要将其放入每个方法中 而只需应用属性即可 但我买不起 PostSharp 有其他方法可以做到这一点吗 Unity3D可以做到吗 我正在使
  • 使用 Gradle 在多个 Android 应用程序之间共享 Android 库

    我有 Android 应用程序 A 和 B 我想将每个应用程序中的重复代码提取到共享库 L 中 如何使用 Gradle 执行此操作 我之前见过这个问题的一些排列 但答案很少 最接近 最好的已问问题是这个 多个 Android 应用程序依赖于
  • 使用 strace 修复挂起内存问题

    我有一个在 RHEL6 x 64 位 上运行的多线程进程 我发现当我尝试启动该进程时 该进程挂起并且大多数线程 同一进程的 崩溃 有些线程等待线程之间的共享内存被创建 我可以看到所有的共享内存都没有被创建 但是当我使用 strace 时 进
  • 获取Android库中的上下文

    我正在编写一个 Android 应用程序 它的一些功能封装在内部库中 但是 要使此功能发挥作用 库需要一个应用程序上下文的实例 为图书馆提供这种上下文的最佳方式是什么 我看到了一些选择 但没有一个有吸引力 Have my library c

随机推荐

  • 如何以编程方式访问设备设置?

    有没有办法以编程方式访问设备设置 例如 设置 gt 开发者选项 gt USB 调试 gt True False 提前致谢 编辑 USB调试只是一个例子 我可以访问设备设置中存在的每个设置吗 Settings Secure putInt ge
  • eval-after-load 与模式挂钩

    使用模式设置事物之间有区别吗eval after load并使用模式挂钩 我见过一些代码define key在主要模式挂钩和其他一些代码中使用define key用于eval after load form Update 为了更好地理解 这
  • OpenAI API 拒绝设置不安全标头“User-Agent”

    我不明白为什么我会收到此错误 拒绝设置不安全标头 User Agent 我正在尝试将 OpenAI 的 API 用于个人项目 我不明白为什么它拒绝设置这个 不安全的标头 以及如何或是否可以使其安全 我尝试用谷歌搜索这个问题 顶部的链接是一个
  • 使用 jquery ajax asp.net 4.0 调用 asmx 服务

    我正在尝试使用 jquery 调用示例 asmx 服务 这是 jquery 代码 ajax type POST url Services Tasks asmx HelloWorld data dataType json contentTyp
  • 在 Java 中迭代 ArrayList 的 ArrayList

    我有以下数组列表 ArrayList
  • 如何测试 Angular 中的渲染速度

    我们正在构建一个 Angular 应用程序 并试图找出如何获得一些有关渲染各种页面所需时间的基准 我读过关于performance timing here https stackoverflow com questions 19579035
  • 将非标准 Subversion 存储库转换为 git

    我有一个存储库 其布局如下 trunk projectA projectB branches projectA 1 0 projectB 1 0 tags projectA 1 0 1 projectB 1 0 1 我想将它们转换为单独的
  • 从源代码构建时更新 Ubuntu 上的 ccmake 吗?

    我之前安装过cmake and ccmakeUbuntu 上的版本 2 8 7 使用apt get cmake and apt get cmake curses gui 这是 apt get 提供的最新版本 我现在需要将两者更新到 3 1
  • argv[0]什么时候可以为空?

    我对传递参数的理解main 从命令行是argc最小值为1 and argv 0 将始终包含程序名称及其路径 如果在命令行中提供了参数 则argc将有一个大于一的值并且argv 1 to argv argc 1 会有这些论据 现在有一段位于这
  • 为什么我的长时间运行的 python 脚本在运行大约 3 天后会因“无效指针”而崩溃?

    我编写了一个 python 3 脚本来测试 SPI 与 FPGA 的链接 它在 Raspberry Pi 3 上运行 测试的工作原理如下 将 FPGA 置于测试模式 按钮开关 后 发送第一个字节 该字节可以是任何值 然后无限期地发送更多字节
  • 如何使用 R 计算 Tanimoto/Jacquard Score 作为距离矩阵

    我想使用 Tanimoto Jacquard Score 作为距离矩阵来计算 R 数组中行的距离矩阵 有可能做到吗 如果是的话 你介意教我怎么做吗 vegan http cran r project org web packages veg
  • ViewController 被释放,导致崩溃

    我的故事板中有一个视图 我为其分配了一个名为 MainView 的标识符 但是 如果我将其视图添加到子视图中 则接下来的所有内容都会产生崩溃 例如按下按钮 MainViewController mvc self storyboard ins
  • 无法在匹配中调用远程函数:Foreach 循环

    我试图在 for each 循环内设置用户模型的某些属性 但我不断收到以下错误 无法在匹配内调用远程函数 x token 0 elixir src elixir fn erl 9 匿名 fn 3 in elixir fn translate
  • Ant Build AAPT Crunch 正在从库资源图像中剥离 draw9 信息

    我有一个正在使用库项目的项目 图书馆项目有draw9 9 png 文件 当通过Ant构建apk时 它会剥离可缩放和可填充区域的draw9信息 结果是应用程序只是拉伸图像而不使用draw9信息 在Android的build xml中
  • WooCommerce 自定义产品类型 - 多个添加到购物车部分问题

    我在 woocommerce 中创建了一个名为 Booking 的自定义产品类型 这是我的代码 class WC Product Booking extends WC Product construct function access pu
  • SheetJS xlsx-style需要excel中的单元格样式

    我正在尝试使用 SheetJS xlsx 导出 Excel 并希望格式化单元格 我正在使用以下代码 并且正在生成 Excel 但无法格式化单元格 任何人都可以指出这个问题或者可以分享完整的示例代码吗 加载库文件 剩下
  • java / android 中的数字签名(RSA 密钥)

    我想在我的 java android 项目中使用存储在数据库中的私钥 RSA 生成数字签名 我的 2 个密钥是使用以下代码生成的 项目正在生产中 我无法更改它 Get keys pair RSA KeyPair rsaKyePair cre
  • 设备支持警告:Google Play 2019

    Today I submitted the update to my app and got below severe warning但是当我比较两个应用程序时 一切看起来都一样 谁能解释一下警告的真正含义是什么 我担心它是否排除了某些设备
  • 为什么ExecutorService执行HashMap操作时会死锁?

    当运行以下类时 ExecutionService 经常会死锁 import java util ArrayList import java util Collection import java util HashMap import ja
  • 跟踪对共享库的调用

    我正在Linux下开发一个程序 出于调试目的 我想跟踪从程序到某个 最好是共享 库的所有调用 我不想跟踪库内发生的调用 对于系统调用 有 strace 是否有任何工具可以跟踪对共享库的调用 您正在寻找的工具称为ltrace 它允许跟踪从程序