1. ホーム
  2. リナックス

GDB を使用する Sever デバッガーのプロンプトは Warning: ブレークポイント X を挿入できません。アドレス 0xXXXXXX のメモリにアクセスでき ません。

2022-02-25 11:55:19
<パス

記事目次

質問内容

GDBを使用してブレークポイントを追加した後、ブレークポイントが正常に追加されたことを示すプロンプトが表示され、Continueコマンドで次のエラーメッセージが表示されます。

Warning:
Cannot insert breakpoint 3.
Cannot access memory at address 0x722ae8

Command aborted.


百度の原則に則り、まずググってみたところ、以下のような類似事例が出てきました。

  1. メインプログラムと同じプロセスでブレークポイントを追加していないため、ブレークポイントを挿入する際に失敗する
  2. 挿入されたブレークポイントはアドレス型ブレークポイントであり、プログラムにこのアドレスが含まれているとは限らないため、ブレークポイントを挿入することはできません。
  3. デバッグを開始する前に、GDBのstartiコマンドを実行したことを確認します。

ソリューションプロセス

問題を特定しやすくするために、問題に至った手順を記述することから始める

  • GDBのデバッグ方法はGDB Sever debuggingで、以前は問題なく動作していた
  • 同僚がデバッグ時に上記の問題に遭遇し、私の環境を使って彼のボードをデバッグしたいと言ってきたので、私の環境でデバッグする
  • リモート接続後、私の環境では上記のエラーが発生する

課題分析

  • 最初のケースは、明らかに複数のプロセスで発生する問題であり、直接的には除外されます。
  • 挿入されたブレークポイントが関数型であり、問題のトラブルシューティングのためにインターフェースが挿入されているので、2番目の問題も除外されます。
  • GDB Server 環境で run コマンドと start コマンドを入力すると、リモート接続がコマンドをサポートしていないことを直接プロンプトで表示します。

上記の問題はどれも正しくないので、上記の状況を具体的に分析し、問題解決のアイデアを共有する必要があります

  1. ブレークポイントの問題をトラブルシューティングするために、再度すべてのブレークポイントを削除する
  2. GDBプログラムのトラブルシューティングを行うためにGDBを再実行する
  3. ローカルの実行ファイルがリモートの実行ファイルと同じかどうかを確認する

今回の問題は3つ目のケースに該当しますが、このドキュメントが困っている人の助けになれば幸いです もしかしたら、問題の原因は比較的単純で低レベルかもしれませんが、この解決策が読者を悩ませる問題を解決するきっかけになればと思います