web-dev-qa-db-ja.com

gdbserverを終了するには?

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を終了する方法は?

19
yehudahs

コマンドを与える

monitor exit

Host gdbからクライアントを終了します。すでに終了している場合は、別のものと接続してください。

15

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>
2
Innovation

gdbserverは、ホストではなくターゲットで実行されます。

終了はターゲットに依存します。たとえば、ターゲットがUNIX風であれば、リモートログインしてpsを使用し、ターゲットシェルからkillできます。

どのタイプのターゲットでも、再起動するとgdbserverが強制終了されます。

(これでは質問に答えるのに十分でない場合は、質問にターゲットに関する詳細情報を含めてください。)

2
Paul Beusterien

[式]を終了


q GDBを終了するには、quitコマンド(qと省略)を使用するか、ファイルの終わり文字(通常はC-d)を入力します。式を指定しない場合、GDBは正常に終了します。それ以外の場合は、式の結果をエラーコードとして使用して終了します。

0
wsha

ターゲットが終了すると、gdbserverも終了します。問題は、ターゲットがどのように存在しているかです。

  1. 何もしない:ただ抜ける
  2. メインで0を返す
  3. メインのexit(0)

私が実行していたデバッグセッションから、最初のケースでは、gdbserverは終了しません。それは永遠にぶらぶらして、あなたはそれを殺さなければなりません。後者の2つの場合、gdbserverは終了します。

0
cup

これが私が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"
0
Ivan Talalaev