したがって、これの代わりに:
![画像](https://habrastorage.org/getpro/habr/post_images/32d/351/1da/32d3511dab2f36e11e76ccf3611f6cfa.png)
標準のJavaライブラリをデバッグする場合は、こちらをご覧ください>>
![画像](https://habrastorage.org/getpro/habr/post_images/099/c94/22a/099c9422a473b393e7811fd132c5323b.png)
リンクで説明されているアプローチに基づいて作成されました。
www.javalobby.org/java/forums/t103334.html
forums.sun.com/thread.jspa?threadID=428018&tstart=1620
www.javalobby.org/java/forums/t19866.html
どうやって? 簡単に言うと、 -gコンパイラオプションを使用してJDKからsrc.zipを再コンパイルします。
前提条件:JDKおよびpythonによってインストールされます。
手順。 明確にするために、どこかに空のパパを作成します。D:/ rt_debug、JDKインストールからsrc.zipおよびrt.jarを解凍します。 新しくインストールしたjdk-6u20でこの手順を実行しました。 したがって、D:/ rt_debugに2つのフォルダーD:/ rt_debug / rtとD:/ rt_debug / srcがあります。 同じフォルダーで、次の内容のスクリプトgen_compile_files_list.pyを作成します。
from os import walk
from os.path import join
def find(path, ext):
for dir, _, files in walk(path):
for f in files:
if f.endswith(ext):
yield join(dir, f)
#print '\n' .join(find( 'src' , '.java' ))
def go():
src_files = list(find( 'src' , '.java' ))
rt_files = list(find( 'rt' , '.class' ))
n_src = len(src_files)
n_rt = len(rt_files)
print 'java files:' , n_src
print 'rt files:' , n_rt
src_files=[s[4:-5] for s in src_files] # src/qqq.java -> qqq
rt_files = set ([s[3:-6] for s in rt_files ]) # rt/qqq. class -> qqq
out = open( "to_compile.txt" , "w" )
to_compile = 0
obsolete = 0
for j in src_files:
f = "%s.java\n" % j
if j in rt_files:
out .write(f)
to_compile += 1
else :
#print "Obsolete: " , f
obsolete += 1
print 'will compile:' , to_compile
print 'obsolete:' , obsolete
out .close()
go()
* This source code was highlighted with Source Code Highlighter .
このコードは、to_compile.txtファイルに.javaファイルのコンパイル済みリストを生成します。 事実、判明したsrc.zipにはrt.jarにないソースがいくつかあります(したがって、下位互換性があると思いますか?)。これが存在するとコンパイルが中断されます。
スクリプトを実行すると、to_compile.txtファイルが表示されます。 次に、次の内容でc.batファイルを作成します(java_homeへのパスを修正します)。
@echo off
set JH=C:/Program Files/Java/jdk1.6.0_20
set VER=1.6
if not exist classes (
echo Creating classes dir
mkdir classes
)
echo Compiling...
cd src
"%JH%\bin\javac" -nowarn -g -d ../classes -J-Xmx512m -classpath ../rt -source %VER% -target %VER% @../to_compile.txt 2>../error.log
echo Creating jar...
cd ../classes
"%JH%\bin\jar" -cf ../rt-dbg.jar *
cd ..
echo Done.
* This source code was highlighted with Source Code Highlighter .
または、Linuxユーザーの場合、コンテンツを含むc.sh:
JH= "C:/Program Files/Java/jdk1.6.0_20"
VER=1.6
if ! [ -d classes ]; then
echo Creating classes dir
mkdir classes
fi
echo Compiling...
cd src
"$JH\bin\javac" -nowarn -g -d ../classes -J-Xmx512m -classpath ../rt -source $VER -target $VER @../to_compile.txt 2>../error.log
echo Creating jar...
cd ../classes
"$JH\bin\jar" -cf ../rt-dbg.jar *
echo Done.
* This source code was highlighted with Source Code Highlighter .
(スクリプトはMSYSでテストされました)。
その結果、すべてがうまくいけば(最後にerror.logをチェックし、warning'iだけがあるはずです)、同じディレクトリにrt-dbg.jarファイルを取得します。
次に、Javaにこのアセンブリのクラスを使用させるには、キーで実行する必要があります
-Xbootclasspath/p:D:/rt_debug/rt-dbg.jar
上記のリンクは 、Javaインストールのエンドースされたディレクトリにドロップできると言っていますが、この方法ではうまくいきませんでした。
上記のコードはリンクからダウンロードできます。
UPD。 rt-dbg.jar (17 mb)