如何获取JVM本机级函数的符号名称?

时间:2015-06-03 11:21:02

标签: java gdb

我想用gdb设置断点但我不知道该方法的相应符号。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

我认为评论指出的JNI规范是这样做的原则性方法。

但是,从gdb以交互方式找到该函数也不难。您需要知道的只是您的方法的名称(让我们称之为"您好")并且JNI名称始终以" Java _"开头。然后你可以向gdb索取所有匹配函数:

(gdb) info function ^Java_.*hello

这将找到该名称的所有功能。

只要您的方法具有plain或camelCase名称,此方法就可以正常工作。它不适用于嵌入式" _"或非ASCII字符。为此,您将不得不阅读规范。

现在,如果gdb已经看不到该函数,这将无效 - 例如,如果尚未加载JNI .so。您可以通过运行到加载点或在相关库上使用nm等来完成此操作。