如何在hadoop源代码中调试本机函数?

时间:2015-11-08 12:38:12

标签: java eclipse hadoop java-native-interface

我试图通过使用eclipse调试来理解hadoop源代码。 当我调试它时,我在这里遇到了一个名为start0()的本机函数:
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/java/lang/Thread.java#Thread.start0%28%29

我可以使用eclipse"或使用任何外部工具"来调试它。或者至少我可以阅读这个功能的源代码吗? Hadoop是一个开源的,所以我认为我可以访问和阅读其中所有功能的代码,但我不知道如何。

Note: my hadoop version : 1.2.1

编辑: 我读到了关于本机函数的内容,根据我的内容,包含本机函数的类应包含类似的内容:

`// load DLL that contains static method
static {
System.loadLibrary("NativeDemo");
}`

但是hadoop中的线程类包含这个:
    /* Make sure registerNatives is the first thing <clinit> does. */ 134 private static native void More ...registerNatives(); 135 static { 136 registerNatives(); 137 }

那么如何知道start0()函数链接到的库的名称?

2 个答案:

答案 0 :(得分:0)

您始终可以获取源代码。您的版本的示例配置文件为here

答案 1 :(得分:0)

我终于得到了start0()函数是java代码的一部分而不是hadoop代码的一部分,所以它只是做/创建一个新线程来运行它上面的作业,而对于hadoop开发我们只需要知道:
Thread.start0最终会创建一个新的操作系统线程,并在该新线程中调用Thread.run()。
在创建新线程之后调用的run函数在这里: http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.collector/1.2.1/org/apache/hadoop/mapred/LocalJobRunner.java#LocalJobRunner.Job.run%28%29