首页 > 编程问答 >需要检查 EDA 工具在自身和操作系统(Linux)中的依赖性的最佳做法

需要检查 EDA 工具在自身和操作系统(Linux)中的依赖性的最佳做法

时间:2024-05-31 13:26:07浏览次数:19  
标签:testing binary operating-system shared-objects eda

将 EDA 工具套件发布到生产计算环境 (RHEL) 中可能会出现问题,尤其是在其发布或操作系统级别中缺少某些共享对象的情况下。

迁移操作系统也会带来同样的问题,因为 glibc 版本可能会更改,其他系统级别的 .so 文件也可能会丢失。

EDA 工具套件(例如 Synopsys VCS)可能会有数十个甚至数百个用户可执行文件,这些可执行文件通常是具有不可预测结构的封装器的封装器(csh、ksh、python 等),它们在最终调用二进制文件之前会在不同级别增强环境(LD_LIBRARY_PATH、LD_PRELOAD 等)。

我曾在一个流程中使用 Linux 查找和文件命令来识别与操作系统体系结构(例如 amd64)一致的二进制可执行文件,然后在这些二进制文件上运行 ldd 来检查是否存在缺失的依赖关系;但是,由于 LD_LIBRARY_PATH 未正确设置,或者由于某些原因在发布版本中仍然打包了明显不兼容的二进制垃圾文件,这导致了太多的错误标记。

我真正需要的是在调试环境中使用 (ldd BINARY_PATH > RESULTS) 替换二进制调用的自动方法,或许可以使用一些类似于 strace 的工具,在检测到感兴趣的二进制执行时提供一个钩子。 有没有一个系统级调试器能做这样的事情?

作为最后的办法,我在考虑复制 EDA 版本的结构,用在原始二进制文件上执行 ldd 的同名封装程序替换二进制可执行文件;这种方法的运行环境应该是正确的。 明显的缺点是设置时间较长;这些工具的结构非常庞大,但我或许可以对文件进行硬链接。


你提出的问题确实在 EDA 软件移植到生产环境中很常见,特别是跨不同的 Linux 发行版或版本时。你提到的使用 ldd 的方法虽然可行,但确实存在误报和效率低下的问题。

让我们看看几种可能更有效和准确的解决方案:

1. 使用容器技术

  • 这是目前最推荐的解决方案。将 EDA 工具链和所有依赖项打包到 Docker 或 Singularity 等容器中,可以确保在任何兼容的 Linux 环境中都有一致的运行环境。
  • 优点:
    • 消除依赖冲突,保证运行环境一致性。
    • 简化部署和迁移过程。
    • 提供版本控制和回滚功能。
  • 缺点:
    • 需要学习容器技术。
    • 对于非常庞大的 EDA 工具链,构建和管理容器镜像可能较为复杂。

2. 使用系统级调试工具

  • strace 是一个很好的选择。你可以使用 -e trace=execve 选项跟踪进程执行的二进制文件,并结合 grepawk 等工具提取所需的信息。
    • 例如: strace -f -e trace=execve ./your_eda_script 2>&1 | grep "execve(" | awk '{print $2}' | tr -d '"' | sort | uniq
  • 优点:
    • 无需修改原始 EDA 工具链。
    • 可以捕获到实际运行时加载的动态链接库,更准确。
  • 缺点:
    • 需要对 strace 和 shell 脚本有一定的了解。
    • 对于复杂的 EDA 工具链,分析 strace 输出可能比较困难。

3. 使用 Auditd

  • Linux Audit 系统可以记录系统调用,包括 execve。你可以配置 Auditd 来专门记录 EDA 工具链执行的所有二进制文件,并使用 ausearchaulastlog 等工具分析数据。
  • 优点:
    • 对系统性能影响较小。
    • 可以记录历史执行信息,方便追溯问题。
  • 缺点:
    • 配置 Auditd 相对复杂。
    • 分析 Audit 日志需要一定的专业知识。

4. 使用 LD_DEBUG 环境变量

  • 设置 LD_DEBUG 环境变量可以输出更详细的动态链接器调试信息,包括加载的动态链接库路径。
    • 例如: export LD_DEBUG=libs ./your_eda_script 2>&1 | grep "find library" | awk '{print $4}' | sort | uniq
  • 优点:
    • 无需额外工具,使用方便。
  • 缺点:
    • 输出信息量大,难以分析。
    • 不如 strace 准确,因为可能无法捕获到所有动态链接库加载事件。

关于你的“最后办法”:

  • 虽然可行,但这种方法确实存在设置时间长、维护成本高的缺点。
  • 如果 EDA 工具链结构非常复杂,你可能需要编写脚本来自动化创建封装程序的过程。

建议:

  • 优先考虑使用容器技术,因为它能提供最可靠和便捷的解决方案。
  • 如果容器技术不可行,可以尝试使用 strace 或 Auditd 等系统级调试工具。
  • 避免使用你提到的“最后办法”,因为它效率低下且难以维护。

希望这些信息能够帮助你找到解决问题的最佳方案!

标签:testing,binary,operating-system,shared-objects,eda
From: 78558236

相关文章

  • twrp 刷机包 刷入magisk.zip 构造原理 关键词:META-INF update-binary updater-script
    https://blog.csdn.net/yuleslie/article/details/8718385  #MAGISK##############################################MagiskFlashScript(updater-script)#bytopjohnwu############################################################Preparation#########......
  • Spring学习:AllArgsConstructor、RequiredArgsConstructor注入bean
    @NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor(搭配@FieldDefaults、@NonFinal)的区别以及在springboot常用地方 注解解释、区别:@NoArgsConstructor:生成无参的构造方法。@AllArgsConstructor:生成该类下全部属性的构造方法。(主讲)@RequiredArgsConstructo......
  • HITSC_Testing and Test-First Programming
    目标测试优先模块设计:等价划分、边界值分析覆盖度本节内容如下Softwaretesting测试是为了“破坏”好的测试?能发现错误不冗余有最佳特性别太复杂也别太简单测试等级回归测试包含三类单元、集成、系统,对应不同的级别一些概念静态和动态测试:静态只能发现一些......
  • 【Java学习】第19节:时间类(Date、Calendar、SimpleDateFormat)、包装类
    目录第一章Date类1.1Date概述1.2Date常用方法第二章SimpleDateFormat类2.1构造方法2.2格式规则2.3常用方法2.4练习1(初恋女友的出生日期)2.5练习2(秒杀活动)第三章Calendar类3.1概述3.2常用方法3.3get方法示例3.4set方法示例:3.5add方法示例:第......
  • 数据 tree or binary
    ST表本来不想写的,但是我考试因为ST表写错,痛失\(100\)分,想想还是写吧简介原型是倍增,不过它是用来求区间最值(其实也可以求和),而且是静态的(不如线段树),区间最值也可以写成:\(RMQ\)问题,ST表可以让查询最值达到\(O(logn)\),算是很高效了。思路将区间dp的\(dp[i][j]\)变成\(f[......
  • Testing Egineer note:2024_4_27-day01-part02
    肖sir__软件测试之计算机基础_1.2软件测试之计算机基础1.硬件:计算机的硬件是计算机的各种设备的总称,硬件分为五个部分:(1)运行器(cpu)(2)控制器(主板)(3)存储器(硬盘)机械硬盘和固态硬盘(4)输入设备(键盘,鼠标)(5)输出设备(显示器,音响)2、软件:当电脑启动时的应用程序,应用软件(腾讯,qq,有道......
  • 如何保障EDA数据传输过程中,核心数据的安全可靠流转?
    EDA是指利用计算机辅助设计软件,来辅助完成超大规模集成电路芯片的设计,制造、封装、测试整个流程。随着芯片设计的复杂程度不断的提升,基于先进工艺节点的这种集成电路的规模,可以达到数10亿个半导体的器件,所以不借助EDA已经无法完成芯片的设计,因此EDA已经成为芯片设计的必要工具,是推......
  • 96-Unique Binary Search Trees 二叉搜索树的数量
    问题描述链接:https://leetcode.com/problems/unique-binary-search-trees/description/Givenaninteger n,return thenumberofstructurallyunique BST's(binarysearchtrees)whichhasexactly n nodesofuniquevaluesfrom 1 to n.解释:给定一个整数n,求1~n......
  • Testing Egineer note:2024_5_20-day12-part01
    管理工具禅道一、禅道的介绍(1)定义禅道是一个项目管理工具,也是一个bug管理工具,还是一个用例管理工具。(2)作用:为了解决众多企业在管理中出现混乱,无序的现象,开发出来(3)来源:禅道属易软天川公司(4)禅道是集于产品管理,项目管理,测试管理于一身,同时包含事务管理,组织管理8众多功能,是中小企......
  • Uri.EscapeDataString 和 Server.UrlEncoding 的区别
    今天在iis中访问一个即含有空格又含有#的文件名时,通过iis直接访问都无法到达,显示404,即便是urlencode文件名后依然无济于事,最后通过gpt问到了答案。Uri.EscapeDataString和Server.UrlEncode是.NETFramework中用于URL编码的两个方法,它们有以下区别:命名空间和所属类:Uri.Es......