Gdbserverでデバッグしようとしています。ホスト上のgdbクライアントを終了した後、gdbserverがまだリッスンしていることがわかります。
Remote side has terminated connection. GDBserver will reopen the connection.
Listening on port 5004
私が見つけたものすべてで運が悪くてgdbserverを終了しようとしました:終了、終了、q、監視exit、Esc、Cnt + c ...何もそれを殺しません。さらに、別の端末を開いてgdbserverを実行しているプロセス(ps、topコマンドを使用)を探したところ、そこに見つかりませんでした...私の質問は-gdbserverを終了する方法は?
コマンドを与える
monitor exit
Host gdbからクライアントを終了します。すでに終了している場合は、別のものと接続してください。
monitor exit
ステップバイステップ
https://stackoverflow.com/a/23647002/895245 はそれについて言及していますが、これは必要な完全なセットアップです。
リモート:
# pwd contains cross-compiled ./myexec
gdbserver --multi :1234
地元:
# pwd also contains the same cross-compiled ./myexec
gdb -ex 'target extended-remote 192.168.0.1:1234' \
-ex 'set remote exec-file ./myexec' \
--args ./myexec arg1
(gdb) r
[Inferior 1 (process 1234) exited normally]
(gdb) monitor exit
Ubuntu 14.04でテスト済み。
linuxでの書き込み:
ps -ef |grep gdbserver
次に、gdbserverプロセスのpidを見つけて、
kill -9 <pid>
gdbserver
は、ホストではなくターゲットで実行されます。
終了はターゲットに依存します。たとえば、ターゲットがUNIX風であれば、リモートログインしてpsを使用し、ターゲットシェルからkillできます。
どのタイプのターゲットでも、再起動するとgdbserver
が強制終了されます。
(これでは質問に答えるのに十分でない場合は、質問にターゲットに関する詳細情報を含めてください。)
[式]を終了
q GDBを終了するには、quitコマンド(qと省略)を使用するか、ファイルの終わり文字(通常はC-d)を入力します。式を指定しない場合、GDBは正常に終了します。それ以外の場合は、式の結果をエラーコードとして使用して終了します。
ターゲットが終了すると、gdbserverも終了します。問題は、ターゲットがどのように存在しているかです。
私が実行していたデバッグセッションから、最初のケースでは、gdbserverは終了しません。それは永遠にぶらぶらして、あなたはそれを殺さなければなりません。後者の2つの場合、gdbserverは終了します。
これが私がsshとgdb server
を開始するために使用しているスクリプトです必要に応じてctrl + cで強制終了
#!/usr/bin/env bash
trap stop_gdb_server INT
function stop_gdb_server {
ssh remote-srv-name "pkill gdbserver"
echo "GDB server killed"
}
ssh remote-srv-name "cd /path/to/project/dir/ && gdbserver localhost:6789 my-executable"