如何判断OpenJDK是否安装了调试符号

2023-12-02

我安装了openjdk-devel and openjdk-devel-debuginfoRedHat Linux Server 8+ 中的架构具有相同的主要/次要版本。我想确保 OpenJDK 运行时具有用于调试的符号。安装后,我运行了以下命令:

[root@localhost bin]# objdump --syms /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el8_1.x86_64/jre/bin/java

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el8_1.x86_64/jre/bin/java:     file format elf64-x86-64

SYMBOL TABLE:
0000000000000270 l    d  .interp    0000000000000000              .interp
0000000000000290 l    d  .note.gnu.property 0000000000000000              .note.gnu.property
00000000000002b0 l    d  .note.ABI-tag  0000000000000000              .note.ABI-tag
00000000000002d0 l    d  .note.gnu.build-id 0000000000000000              .note.gnu.build-id
00000000000002f8 l    d  .hash  0000000000000000              .hash
0000000000000348 l    d  .gnu.hash  0000000000000000              .gnu.hash
0000000000000370 l    d  .dynsym    0000000000000000              .dynsym
....
....
....

[root@localhost etc]# file /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el8_1.x86_64/jre/bin/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el8_1.x86_64/jre/bin/java: 
ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=613871d1514ba05fa2914c22c10f1dfe01d3d2e8, not stripped


[root@localhost bin]# objdump --syms /usr/lib/debug/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el8_1.x86_64/bin/java-1.8.0.242.b08-0.el8_1.x86_64.debug

/usr/lib/debug/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el8_1.x86_64/bin/java-1.8.0.242.b08-0.el8_1.x86_64.debug:     file format elf64-x86-64

SYMBOL TABLE:
no symbols

[root@localhost bin]# file /usr/lib/debug/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el8_1.x86_64/bin/java-1.8.0.242.b08-0.el8_1.x86_64.debug
/usr/lib/debug/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el8_1.x86_64/bin/java-1.8.0.242.b08-0.el8_1.x86_64.debug: 
ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter \004, for GNU/Linux 3.2.0, BuildID[sha1]=613871d1514ba05fa2914c22c10f1dfe01d3d2e8, with debug_info, not stripped

正如上面所暗示的,我看到objdump for java打印出某种符号表,但我读过还应该寻找.debug*在输出中,我在其余的中没有看到SYMBOL TABLE部分(为简洁起见,从上面的输出中省略了几十行)。

我看到file for /usr/lib/debug/..../java...debug says with debug_info,但我需要确认 Java 安装确实有符号。


java可执行文件只是一个简单的启动器。您不会在那里找到 JVM 符号。

要查看 JVM 是否有调试符号,请检查libjvm.so反而:

nm /usr/lib/jvm/jre/lib/amd64/server/libjvm.so

我的最终目标是在我的服务器旁边加载一个 malloc 分析器 尝试跟踪本机内存分配。在这种情况下,如果调用 追溯到 JVM,我需要知道调用了哪个方法。

好吧,如果你一开始是this问题,你不会陷入XY问题 trap.

即使使用 JVM 调试符号,本机内存分析器(例如 jemalloc)也无法显示 Java 方法。他们根本不知道如何展开 Java 堆栈,因此跟踪可能会在某些随机的十六进制地址处中断,例如这个问题.

我建议尝试一下异步分析器简介malloc, mprotect and mmap来电。该工具可以显示混合的 Java+本机堆栈跟踪。这是一个例子使用 async-profiler 来分析本机分配。这个视频还演示了 async-profiler 如何帮助查找本机内存泄漏。

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

如何判断OpenJDK是否安装了调试符号 的相关文章

随机推荐

  • 如何在Python Selenium中逐步向下滚动

    大家好 我是 Selenium 和 Python 的新手 我只是在抓取网站帕加尔盖网站 我知道如何向下滚动到页面底部 但我需要的是逐步向下滚动 以便 Selenium 单击所有 阅读更多 按钮 但我不知道如何像这样逐步向下滚动 所以我像下面
  • 使用 geom_tile 清理地图

    感谢本网站上一些用户的帮助 我能够使用 geom point 获得一些数据的漂亮地图 获得州界的边界 但是 现在我正在尝试清理它 因为我有更多年的时间来绘制 并希望确保情节正常工作并提供良好的信息 经过进一步的研究 似乎 geom tile
  • 检查数据库中表是否存在时出现问题

    基本上我有我的 MySQL dbname test 和我的表名称 page 我想使用 php PDO 创建一个查询来检查表 page 是否存在于我的数据库 test 中 我已经尝试过这两件事 但它确实有效 第一个例子总是告诉我它不存在 即使
  • 在 JSP 中使用 struts 2 比较日期

    我想使用比较两个日期Struts2 One is returned from the backend test currentDate 2012 11 15 The other one I just set 2014 10 19 我如何比较
  • move_uploaded_file(...): 无法打开流: 没有这样的文件或目录

    我尝试使用 PHP 和 MySQL 以及临时文件夹将图像插入数据库中 我使用 laravel 这是我的控制器 if isset FILES img masc img FILES img masc name ruta FILES img ma
  • 使用 Python 的 matplotlib 3D API 绘制轮廓的问题

    我正在尝试做类似的事情this文档中的 3D 示例 但使用点云而不是光滑表面 该示例将 2D 轮廓投影到三个坐标平面中的每一个上 这表明我能够在 xy 平面上做到这一点 当我尝试在其他两个平面上做同样的事情时 我得到的要么是一个奇怪的轮廓塌
  • JWT 身份验证,Authorize 属性中定义的角色将被忽略

    在努力实施的同时基于角色的身份验证 using JWT作为默认身份验证方案 我遇到了一种情况 其中定义的角色Authorize属性被忽略 允许任何请求 使用有效的令牌 通过 即使不在这些角色中 有趣的是 具有相同定义的自定义要求的其他策略A
  • 给定并行列表,如何对一个列表进行排序,同时以相同的方式排列(重新排列)另一个列表?

    假设我有 list1 3 2 4 1 1 list2 three two four one one2 Calling list1 sort 将对它进行排序 结果是 1 1 2 3 4 然而 我能得到list2与此同步重新排列 以获得这样的结
  • 如何使用 Gremlin 提高最短路径的性能?

    我正在使用 JanusGraph 和 Gremlin 以及this数据集包含 2 6k 个节点和 6 6k 个边 两侧各 3 3k 个边 我已经运行查询 10 分钟但没有找到最短路径 使用 Gephi 最短路径几乎是瞬时的 这是我的查询 g
  • Pyspark:将 tar.gz 文件加载到数据框中并按文件名过滤

    我有一个包含多个文件的 tar gz 文件 层次结构如下所示 我的目的是读取tar gz文件 过滤掉其中的内容b tsv因为它是静态元数据 其中所有其他文件都是实际记录 gzfile tar gz a tsv b tsv thousand
  • ConcurrentModificationException 和 HashSet.iterator()

    我有一个像这样的for循环 for int neighbour neighbours 我可以修改的地方neighbours循环内 发现这就是原因ConcurrentModificationException 并读自https stackov
  • 如何自定义控制器以在 Devise 中注册?

    当新用户通过 Devise 注册时 我需要添加一些简单的方法和操作 我想应用一种通知方法 该方法会向我发送电子邮件 我想使用acts as network 传递会话值并将新寄存器连接到邀请他们的人 我如何定制 我查看了文档 但我不完全清楚我
  • Java中的自动类型转换?

    Java 有没有办法自动进行隐式类型转换 例如 假设我有两种类型 FooSet 和 BarSet 它们都是集合的表示 类型之间的转换很容易 因此我编写了两个实用方法 Given a BarSet returns a FooSet publi
  • 使用Python请求库发送jquery AJAX GET请求

    我有一个需要抓取的网站 它使用 jquery AJAX 函数从服务器获取信息 我已经研究代码一段时间了 我成功地使用以下命令从服务器获得了响应 data part number 1234 r ajax type GET url ajaxur
  • 查找匹配“a”的模式,忽略位于“b”和“c”内的“a”

    需要一个复合表达式 from such that from is not within parenthesis 忽略括号内的 这里a from b and c 我可以写的最接近 但无效 的模式是 string pat from from f
  • 从月份计算季度

    我有一个数据框 其中包含按月排列的多个列 c1 c2 yyyy 01 yyyy 02 yyyy 03 yyyy 04 yyyy 05 yyyy 06 a A 1 1 3 2 2 3 b B 2 3 4 4 2 1 大约有15年的数据 我需要
  • Python timeit 不适用于 list.remove 操作

    我试图通过 timeit 模块检查 python 列表中删除操作的性能 但它抛出了 ValueError In 4 a 1 2 3 In 5 timeit a remove 2 ValueError Traceback most recen
  • Java 嵌入式数据库比较 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我打算开发一个小型 Java 应用程序来管理我的财务 我相信我需要使用嵌入式数据库 但我对此问题没有经验 我试着看看一些可用的产品 但我无法决定哪一个更适合我 H2 HSQLDB D
  • 在Python底图中绘制gebco数据

    我已经下载了一些gebco 测深数据作为netCDF 文件 我想用 python basemap 绘制它 我努力了 import netCDF4 from mpl toolkits basemap import Basemap Load d
  • 如何判断OpenJDK是否安装了调试符号

    我安装了openjdk devel and openjdk devel debuginfoRedHat Linux Server 8 中的架构具有相同的主要 次要版本 我想确保 OpenJDK 运行时具有用于调试的符号 安装后 我运行了以下