rt.jarのデバッグバージョンをビルドします

なぜこれが必要なのですか?

したがって、これの代わりに:

画像

標準のJavaライブラリをデバッグする場合は、こちらをご覧ください>>


画像

リンクで説明されているアプローチに基づいて作成されました。

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)

Source: https://habr.com/ru/post/J97262/


All Articles