DockerでGDBを使用するときにブレークポイントを入力できない問題を解決する

DockerでGDBを使用するときにブレークポイントを入力できない問題を解決する

質問

docker で gdb を実行すると、ブレークポイントに到達しますが、ブレークポイントに入ることができません

理由

ホストのセキュリティを確保するために、Docker では、ASLR (アドレス空間レイアウトのランダム化) を含む多くのセキュリティ設定が有効になっています。つまり、Docker 内のメモリ アドレスはホストのメモリ アドレスとは異なります。

ASLR により、GDB などのアドレス依存プログラムが正しく動作しなくなります。

回避策

dockerのスーパー権限を使用し、--privileged(2つのダッシュ、マークダウン構文)を追加します

のように:

docker run --privileged …

GDBは正常に動作します

スーパー権限により多くのセキュリティ設定が無効になり、Dockerの機能を最大限に活用できるようになります。

たとえば、docker で docker を開くことができます(笑)。

追加知識: docker ptrace: 操作は許可されていません。対処方法

docker の gdb がプロセスをデバッグしているときに、エラーが報告されます。

(gdb) アタッチ 30721

プロセス30721に接続中

ptrace: 操作は許可されていません。

その理由は、Docker では ptrace がデフォルトで無効になっているためです。アプリケーション分析のニーズを考慮すると、いくつかのソリューションがあります。

1. seccompをオフにする

docker run --security-opt seccomp=unconfined

2. スーパー権限モードを使用する

docker run --privileged

3. ptrace制限のみを開く

docker run --cap-add sys_ptrace

もちろん、セキュリティの観点から、デバッグにのみ gdb を使用する場合は、3 番目の方法を使用することをお勧めします。

セキュア コンピューティング モード (seccomp) は、コンテナー内で利用可能な操作を制限するために使用できる Linux カーネルの機能です。

Docker のデフォルトの seccomp プロファイルは、許可される呼び出しを指定するホワイトリストです。

次の表には、ホワイトリストに含まれていないために事実上ブロックされている重要な(ただしすべてではない)システム コールがリストされています。この表には、各システム コールがブロックされた理由が記載されています。

システムコール説明
アカウントコンテナが独自のリソース制限やプロセス アカウンティングを無効にできるようにするアカウンティング システムコール。CAP_SYS_PACCT によっても制御されます。
キーを追加コンテナが名前空間化されていないカーネル キーリングを使用しないようにします。
アジタイムックスclock_settime および settimeofday と同様に、time/date は名前空間化されていません。また、CAP_SYS_TIME によって制御されます。
bpf CAP_SYS_ADMIN によって既に制限されている、潜在的に永続的な bpf プログラムをカーネルにロードすることを拒否します。
時計調整時間時刻/日付は名前空間化されていません。CAP_SYS_TIME によっても制御されます。
時計の設定時間時刻/日付は名前空間化されていません。CAP_SYS_TIME によっても制御されます。
クローン新しい名前空間の複製を拒否します。CLONE_USERNS を除く CLONE_* フラグについては、CAP_SYS_ADMIN によっても制御されます。
モジュールの作成カーネル モジュールの操作と機能を拒否します。廃止されました。CAP_SYS_MODULE によっても制御されます。
モジュールの削除カーネル モジュールに対する操作と機能を拒否します。CAP_SYS_MODULE によっても制御されます。
有限モジュールカーネル モジュールに対する操作と機能を拒否します。CAP_SYS_MODULE によっても制御されます。
カーネルシンボルを取得するエクスポートされたカーネルお​​よびモジュール シンボルの取得を拒否します。廃止されました。
get_mempolicyカーネル メモリと NUMA 設定を変更するシステム コール。CAP_SYS_NICE によってすでにゲートされています。
初期化モジュールカーネル モジュールに対する操作と機能を拒否します。CAP_SYS_MODULE によっても制御されます。
イオパームコンテナがカーネル I/O 特権レベルを変更するのを防ぎます。CAP_SYS_RAWIO によって既にゲートされています。
ioplコンテナがカーネル I/O 特権レベルを変更するのを防ぎます。CAP_SYS_RAWIO によって既にゲートされています。
ケーエムピーCAP_PTRACE を削除することですでにブロックされているプロセス検査機能を制限します。
kexec_file_load kexec_load の姉妹システムコールで、同じことを行いますが、引数が若干異なります。CAP_SYS_BOOT によってもゲートされます。
kexec_load後で実行するために新しいカーネルをロードすることを拒否します。CAP_SYS_BOOT によっても制御されます。
キーコントロールコンテナが名前空間化されていないカーネル キーリングを使用しないようにします。
ルックアップクッキートレース/プロファイリング システムコール。ホスト上で大量の情報が漏洩する可能性があります。CAP_SYS_ADMIN によってもゲートされます。
バインドカーネル メモリと NUMA 設定を変更するシステム コール。CAP_SYS_NICE によってすでにゲートされています。
マウントマウントを拒否します。CAP_SYS_ADMIN によってすでにゲートされています。
ページを移動カーネル メモリと NUMA 設定を変更するシステム コール。
ハンドル名open_by_handle_at の姉妹システムコール。CAP_SYS_NICE によってすでにゲートされています。
nfsservctlカーネル nfs デーモンとのやり取りを拒否します。Linux 3.1 以降では廃止されました。
ハンドルで開く古いコンテナのブレークアウトの原因。CAP_DAC_READ_SEARCH によってもゲートされます。
パフォーマンスイベントオープントレース/プロファイリング システムコール。ホスト上で大量の情報が漏洩する可能性があります。
人格コンテナが BSD エミュレーションを有効にしないようにします。本質的に危険ではありませんが、テストが不十分で、多くのカーネル脆弱性が発生する可能性があります。
ピボットルートpivot_root を拒否します。特権操作である必要があります。
プロセス_vm_readv CAP_PTRACE を削除することですでにブロックされているプロセス検査機能を制限します。
プロセス_vm_writev CAP_PTRACE を削除することですでにブロックされているプロセス検査機能を制限します。
ptraceトレース/プロファイリング システムコール。ホスト上で大量の情報が漏洩する可能性があります。CAP_PTRACE を削除することで既にブロックされています。
クエリモジュールカーネル モジュールに対する操作と機能を拒否します。廃止されました。
引用コンテナーが独自のリソース制限やプロセス アカウンティングを無効にできるようにするクォータ システムコール。CAP_SYS_ADMIN によっても制御されます。
リブートコンテナがホストを再起動しないようにします。CAP_SYS_BOOT によっても制御されます。
リクエストキーコンテナが名前空間化されていないカーネル キーリングを使用しないようにします。
メモリポリシーの設定カーネル メモリと NUMA 設定を変更するシステム コール。CAP_SYS_NICE によってすでにゲートされています。
セットスレッドと名前空間の関連付けを拒否します。CAP_SYS_ADMIN によっても制御されます。
日時を設定する時刻/日付は名前空間化されていません。CAP_SYS_TIME によっても制御されます。
ソケット、ソケットコールパケットの送受信、およびその他のソケット操作に使用されます。通信ドメイン AF_UNIX、AF_INET、AF_INET6、AF_NETLINK、および AF_PACKET を除くすべてのソケットおよびソケットコール呼び出しはブロックされます。
時間時刻/日付は名前空間化されていません。CAP_SYS_TIME によっても制御されます。
スワポンファイル/デバイスへのスワップの開始/停止を拒否します。CAP_SYS_ADMIN によっても制御されます。
スワップオフファイル/デバイスへのスワップの開始/停止を拒否します。CAP_SYS_ADMIN によっても制御されます。
sysfs廃止されたシステムコール。
_sysctl廃止され、/proc/sys に置き換えられました。
アンマウント特権操作である必要があります。CAP_SYS_ADMIN によっても制御されます。
アンマウント2特権操作である必要があります。CAP_SYS_ADMIN によっても制御されます。
共有解除プロセスの新しい名前空間の複製を拒否します。unshare –user を除き、CAP_SYS_ADMIN によっても制御されます。
使用ライブラリ長い間使用されていない、共有ライブラリに関連する古いシステムコール。
ユーザーフォールトユーザー空間のページ フォールト処理。主にプロセスの移行に必要です。
ユースタット廃止されたシステムコール。
86さんカーネル x86 リアル モード仮想マシン。CAP_SYS_ADMIN によっても制御されます。
翻訳者カーネル x86 リアル モード仮想マシン。CAP_SYS_ADMIN によっても制御されます。

上記のdockerでGDBを使用するときにブレークポイントを入力できない問題を解決する記事は、エディターが皆さんと共有する内容のすべてです。 皆さんの参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Dockerサーバーのストレージリソースプール不足問題の解決
  • docker runの--rmオプションの使用方法
  • docker-compose が遅すぎる場合の解決策の詳細な説明

<<:  Sysbench の MySQL ベンチマーク プロセスの分析

>>:  HTML iframe と frameset の違い_PowerNode Java Academy

推薦する

VMware15 centos7 ブリッジモード ssh に突然アクセスできなくなる問題を解決する

仮想マシンに独自の LAN IP を持たせたいので、テストを容易にするためにブリッジを使用します。 ...

CSSカスケーディングメカニズムについての簡単な説明

CSS にカスケード メカニズムがあるのはなぜですか? CSS では、同じ要素の特定のプロパティに同...

WeChatアプレットタブの左右スライドスイッチ機能実装コード

効果画像: 1. はじめに独自のアプレットでこのような機能を実装する必要がある1. 核となる考え方ス...

MySQL 5.7.23 のインストールと設定方法のグラフィックチュートリアル

この記事では、参考として MySQL 5.7.23 のインストール チュートリアルを記録します。 1...

MySQL マスタースレーブレプリケーションの原理からインストールと設定までを包括的に解説します。

マスタースレーブレプリケーションがなぜ必要なのでしょうか? 1. 複雑な業務システムでは、SQL 文...

CocosCreatorでクールなレーダーチャートを描く方法

目次序文プレビュー文章グラフィックコンポーネントプロパティ機能グリッドを描く軸角度を計算するスケール...

CSS3 のテキストとフォントの新しい設定

テキストシャドウテキストシャドウ: 水平オフセット 垂直オフセット ぼかし色互換性: IE10+ &...

Vueはマルチタブコンポーネントを実装します

効果を直接確認するために、リロード、左を閉じる、右を閉じる、その他の機能を閉じるなどの右クリック メ...

DockerにTomcatコンテナを追加したときにホームページにアクセスできない問題の解決方法

質問docker run コマンドを使用して、tomcat コンテナが正常に追加されました。ポートも...

ページ要素の絶対位置と相対位置に関するある程度の理解

今日から、定期的にちょっとした豆知識を整理していきます。簡単なものもあるかもしれませんが、どれも役に...

Linux mpstat コマンドの使用方法の詳細な説明

1. mpstatコマンド1.1 コマンド形式 mpstat [ -A ] [ -u ] [ -V ...

Tomcat 例外の解決方法 (リクエスト ターゲットに無効な文字が見つかりました。有効な文字は RFC 7230 および RFC 3986 で定義されています)

1. シナリオ表示Tomcat ログに次の例外情報が時々報告されます。何が起こっているのでしょうか...

Vue ソング プログレス バーのサンプル コード

なお、これはvue-cliで作成したプロジェクトではありません。vue.jsを参照して記述したHTM...

HTML Selectは、デフォルトの選択を設定するためにselected属性を使用します。

オプションに属性 selected = "selected" を追加すると、それ...

Vueコンポーネントの動的コンポーネントの詳細な説明

目次要約する要約する配列が変更されると、対応するデータを動的にロードしますシナリオ: 異なるコンポー...