JDKのソースコードをデバッグするときに変数の値が表示されない問題を解決するにはどうすればよいですか?
数日前、当初はデバッグモードでJDKのソースコードを見ようと思っていましたが、デバッグモードに入ると、メソッド内の変数値がまったく表示されないことがわかりました。なぜ? JDK の現在のバージョンでは、デバッグ情報はコンパイル後に削除されます。解決策は、これらのクラスをデバッグ情報とともにコンパイルし、次のコマンドを使用することです: javac -g
関連情報を確認した後、以下の解決策を
のルートディレクトリにd:を作成します。 jdk7_src および jdk_debug ディレクトリ。
-
JDK_HOME ディレクトリで src.zip ファイルを見つけ、その中のファイルを jdk7_src ディレクトリに解凍し、解凍されたディレクトリ内の java、javax、org 以外のすべてを削除します。 。
-
JDK_HOMEjrelib の下にある rt.jar を作業ディレクトリ、つまり d: のルート ディレクトリの下に置きます (これはコマンドラインで多数のファイル名を指定する必要がないため便利です) 。
- コマンド
dir /B /S /X jdk7_src*.java > filelist.txtを実行して、コンパイルする必要のあるJavaファイルのリスト、javacコマンドのコンパイル用の入力ソースファイル、dirコマンド関連のパラメータを作成します。説明、 /B: 追加のファイル情報を出力しません (ヘッダー情報や概要はありません)、/S: 指定されたディレクトリとすべてのサブディレクトリ内のファイルを表示します、/X: 8.3 以外のファイルに対して生成された短い名前を表示します名前。形式は /N 形式で、長い名前の前に短い名前が挿入されます。短縮名がない場合は、空白が表示されます。
- 実行
javac -J-Xms16m -J-Xmx1024m -sourcepath d:jdk7_src -cp d:rt.jar -d d:jdk_debug -g @filelist.txt >> log.txt 2>&1 コンパイル後ファイルは jdk_debug フォルダーに配置され、コンパイルによって生成されたログは log.txt ファイルに保存されます。ログ ファイルには多くの警告が表示されますが、エラー メッセージは表示されません。
-
jdk_debug ディレクトリに入り、コマンド jar cf0 rt_debug.jar * を実行し、コンパイルされたファイルを rt_debug.jar パッケージにパッケージ化します。
- 新しく生成されたjarパッケージを
JDK_HOMEjrelibendorsedに置きます(承認されたフォルダーがない場合は、手動で作成します)。
注: JDK_HOME は、JDK のインストール パスを表します。この記事のすべてのコマンドは、d: とそのサブディレクトリで実行されます。
もっと簡単に言うと、以下で提供する JDK7 のデバッグ バージョンrt_debug.jar を endorsed フォルダーに入れることもできます。
参考資料- debug jdkソースは変数の内容を監視できません --stackoverflow
- Java Endorsed Standards Override Mechanism --java guides
- rt_debug.jarのダウンロード
以上がJDKのソースコードをデバッグするときに変数の値が表示されない問題を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









C++ マルチスレッド デバッグでは、次のように GDB を使用できます。 1. デバッグ情報のコンパイルを有効にします。 2. ブレークポイントを設定します。 3. infothread を使用してスレッドを切り替えます。 5. next、stepi、および locals を使用してデバッグします。実際のケースのデバッグ デッドロック: 1. threadapplyallbt を使用してスタックを出力します。 2. スレッドのステータスを確認します。 3. メイン スレッドにシングル ステップでアクセスし、デッドロックを解決します。

LeakSanitizer を使用して C++ メモリ リークをデバッグするにはどうすればよいですか? LeakSanitizer をインストールします。コンパイル フラグを介して LeakSanitizer を有効にします。アプリケーションを実行し、LeakSanitizer レポートを分析します。メモリ割り当てタイプと割り当て場所を特定します。メモリ リークを修正し、動的に割り当てられたメモリがすべて解放されるようにします。

この記事では、実行の一時停止、変数の確認、ブレークポイントの設定に使用される組み込みデバッガー dlv など、Go 関数のデバッグと分析のためのショートカットを紹介します。ログ記録。ログ パッケージを使用してメッセージを記録し、デバッグ中に表示します。パフォーマンス分析ツール pprof は、コール グラフを生成してパフォーマンスを分析し、gotoolpprof を使用してデータを分析します。実際のケース: pprof を通じてメモリ リークを分析し、リークの原因となる関数を表示するコール グラフを生成します。

ラムダ式を効率的にデバッグします: IntelliJ IDEA デバッガー: 変数宣言またはメソッドにブレークポイントを設定し、内部変数と状態を検査し、実際の実装クラスを確認します。 Java9+JVMTI: ランタイム JVM に接続して、識別子の取得、バイトコードの検査、ブレークポイントの設定、および実行中の変数とステータスの監視を行います。

同時実行テストとデバッグ Java 同時プログラミングにおける同時実行テストとデバッグは非常に重要であり、次の手法が利用可能です。 同時実行テスト: 単体テスト: 単一の同時タスクを分離してテストします。統合テスト: 複数の同時タスク間の相互作用をテストします。負荷テスト: 高負荷時のアプリケーションのパフォーマンスとスケーラビリティを評価します。同時実行デバッグ: ブレークポイント: スレッドの実行を一時停止し、変数を検査するかコードを実行します。ロギング: スレッドのイベントとステータスを記録します。スタック トレース: 例外のソースを特定します。視覚化ツール: スレッドのアクティビティとリソースの使用状況を監視します。

PHP 非同期コードをデバッグするためのツールには、次のものがあります。 Psalm: 潜在的なエラーを検出する静的分析ツール。 ParallelLint: 非同期コードを検査し、推奨事項を提供するツール。 Xdebug: セッションを有効にしてコードをステップ実行することで、PHP アプリケーションをデバッグするための拡張機能。その他のヒントには、ロギング、アサーションの使用、ローカルでのコードの実行、単体テストの作成などがあります。

一般的な PHP デバッグ エラーには次のものがあります。 構文エラー: コード構文をチェックして、エラーがないことを確認します。未定義の変数: 変数を使用する前に、変数が初期化され、値が割り当てられていることを確認してください。セミコロンの欠落: すべてのコード ブロックにセミコロンを追加します。関数が未定義です: 関数名のスペルが正しいことを確認し、正しいファイルまたは PHP 拡張子がロードされていることを確認してください。

再帰関数のデバッグには、以下のようなテクニックがあります。スタックトレースを確認するデバッグポイントを設定するベースケースが正しく実装されているか確認する再帰呼び出し回数をカウントする再帰スタックを可視化する
