[解決済み] GDBを使用して実行中のプロセスをデバッグできますか?
質問
linux では、現在実行中のプロセスをデバッグするために GDB を使用することができますか?
どのように解決するのですか?
はい。 この場合
attach
コマンドを使用します。 チェックアウト
このリンク
をご覧ください。 タイピング
help attach
をGDBコンソールで入力すると、次のようになります。
(gdb) help attach
GDB外のプロセスやファイルにアタッチする。 このコマンドは、最後にアタッチしたものと同じタイプの別のターゲットにアタッチします。 と同じタイプの別のターゲットにアタッチします。
target
コマンド("info files
"はターゲットスタックを表示します)。 このコマンドは、プロセス ID、プロセス名 (サフィックスとしてオプションの process-id を含む)、またはデバイス・ファイルを引数として取ります。 プロセス ID については、そのプロセスにシグナルを送信する権限が必要です。 また、デバッガと同じ有効な uid を持っている必要があります。 " を使用する場合。attach
を使用すると、デバッガーはそのプロセスで実行中のプログラムを検索します。 プロセスで実行されているプログラムを見つけ、最初に現在の作業ディレクトリを探します。 ディレクトリ、または (見つからない場合は) ソースファイルの検索パス (" を参照) を使用して、そのプロセスで実行されているプログラムを見つけます。 (" を参照してください。directory
"コマンドを参照)。 また、"file
"コマンドを使用することもできます。 を使ってプログラムを指定し、そのシンボルテーブルを読み込むこともできます。
注意:以下の理由により、プロセスにアタッチすることが困難な場合があります。 Linux カーネルにおけるセキュリティの向上 - 例えば、あるシェルの子プロセスに別のシェルからアタッチするような場合です。
を設定する必要がありそうです。
/proc/sys/kernel/yama/ptrace_scope
を設定する必要があるでしょう。多くのシステムでは、現在デフォルトで
1
またはそれ以上に設定されています。
The sysctl settings (writable only with CAP_SYS_PTRACE) are:
0 - classic ptrace permissions: a process can PTRACE_ATTACH to any other
process running under the same uid, as long as it is dumpable (i.e.
did not transition uids, start privileged, or have called
prctl(PR_SET_DUMPABLE...) already). Similarly, PTRACE_TRACEME is
unchanged.
1 - restricted ptrace: a process must have a predefined relationship
with the inferior it wants to call PTRACE_ATTACH on. By default,
this relationship is that of only its descendants when the above
classic criteria is also met. To change the relationship, an
inferior can call prctl(PR_SET_PTRACER, debugger, ...) to declare
an allowed debugger PID to call PTRACE_ATTACH on the inferior.
Using PTRACE_TRACEME is unchanged.
2 - admin-only attach: only processes with CAP_SYS_PTRACE may use ptrace
with PTRACE_ATTACH, or through children calling PTRACE_TRACEME.
3 - no attach: no processes may use ptrace with PTRACE_ATTACH nor via
PTRACE_TRACEME. Once set, this sysctl value cannot be changed.
関連
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?
-
[解決済み] フォルダとそのサブフォルダ/ファイルのパーミッションを一括で変更する方法
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Linux で grep を使ってファイル名だけを表示するにはどうしたらいいですか?
-
[解決済み] ディレクトリへのシンボリックリンクを削除する
-
[解決済み] Linuxで特定のポートで動作しているプロセスを停止させる方法は?
-
[解決済み] アプリケーションやプロセスの実際のメモリ使用量を測定するにはどうすればよいですか?
-
[解決済み] 何が私のプロセスを殺したのか、なぜなのか?
-
[解決済み] Bashスクリプト内でGDBを使用してコマンドライン引数を持つプログラムを実行するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ゼロからLinuxのisoイメージを作る方法(グラフィックチュートリアル)
-
LinuxでSteamをダウンロードしインストールする方法
-
LinuxでPingを無効にする、または許可する設定方法
-
Linuxにおけるxinetdサービスの管理方法に関するケーススタディ
-
deepinシステムのバージョン番号を見るには?deepinシステムのバージョン情報を見るコツ
-
deepin linuxでroot権限に切り替えるには?Deepinでrootに切り替えるためのヒント
-
2020年deepin Deep OS V20のアップデートによる更新情報
-
sudo が sudo として表示される: setuid root である必要がある
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
-
[解決済み] 出力をファイルや標準出力にリダイレクトする方法