当前位置: 首页 > 面试题库 >

使用Java JNI时是否可以调试核心转储?

井嘉胜
2023-03-14
问题内容

我的应用程序主要是Java,但对于某些计算,使用的是C ++库。我们的环境是在RedHat 3(即将成为RedHat 5)上运行的Java 1.6。

我的问题是C 库不是线程安全的。为解决此问题,我们运行了多个单线程“工作者”进程,并由中央工作管理器(也用C

编写)为它们提供工作。我们的Java应用程序通过第三方产品调用C ++工作管理器。

由于各种原因,我们想重新编写C Work Manager和worker。我赞成使用Java编写所有代码,并在每个worker中使用JNI来调用C

库。

主要问题是如果C 库核心转储会发生什么。不幸的是,这很普遍,我们需要能够查看C 库中的哪一行导致了问题,例如,通过检查类似GDB的回溯。

我的同事认为,无法分析核心转储,因为GDB之类的工具无法理解Java生成的核心文件。

我希望它们是错误的,但是在进一步推动我的想法之前,我需要确定。

分析Java / JNI产生的核心转储的最佳方法是什么?


问题答案:

就在这里。每次JVM由于JNI部分中的SIGSEGV崩溃时,您都会在$ JAVA_HOME /
bin目录中获得一个带有核心转储的文件。通常将其命名为hs_err_PID.log。

您可以在此处和此处获取更多信息。这是一个有点相关的stackoverflow问题。



 类似资料:
  • 我想知道是否有人试图使用jmeter测试gRPC应用程序。 我希望 我可以使用非阻塞/异步存根编写一个gRPC客户端类,该存根对服务器进行非阻塞调用, 创建上述客户端的Jar 将Jar导入JMeter 使用Jeter BeanShell采样器中的Java方法 在花时间尝试上述方法之前,我想看看是否有人尝试过类似的方法 如果上述解决方法有效? 每个线程会创建一个单独的传输控制协议吗? 我们已经用py

  • 问题内容: 无论如何,当JVM崩溃时,是否有生成内核/堆转储文件的信息?由于这些文件通常对于查找代码中的错误非常有帮助。 问题答案: 使用以下JVM选项: JVM会将堆的内容转储到指定目录中的文件中。请注意,这仅在引发时发生,因为如果JVM因其他原因而崩溃,则确实不需要转储。 编辑:“布尔选项用-XX:+打开,而用-XX:-关闭。” docs

  • 问题内容: 考虑类型: 现在假设我要遍历一个类实例的集合并在每个实例上调用一些函数: 该语法非常紧凑,但感觉有点尴尬。另外,它不能在任何地方使用。例如,在语句条件中: 理想情况下,写类似 但是从Swift 2.1开始,这不是正确的语法。这种引用该函数的方式将类似于以下内容: 有没有更好的方法来引用实例函数?您如何喜欢写这样的表达式? 问题答案: 这里有两个不同的问题。的 拖尾闭合语法 可以在调用函

  • 问题内容: 是否可以从Java调用COM API(特别是HP / Mercury Quality Center OTA API)?如果是这样,最好的方法是什么? 像JACOB一样合适吗? 代码片段对于基础知识会有所帮助:-) 问题答案: jacob:是的,http://sourceforge.net/projects/jacob- project/ 是一个活跃的项目,可以很好地满足您的目的。 您可

  • 我的文件夹是26 GB。 直接删除所有内容安全吗?那些文件会自动重新生成吗?

  • 当JVM继续运行main方法生成的其他线程时,执行main方法的线程显然会终止。因此,提取Java堆栈跟踪(例如“jstack”输出)不足以找出启动JVM的初始类。我也不知道JDK中通常包含的其他命令会从运行的JVM或核心文件中提取这些信息。 我正在研究一些核心文件分析的自动化,理解JVM启动的类会很有帮助,即使在创建核心文件时没有线程在该类下运行代码。 问题:JVM(特别是Oracle和Open