gdbserverを使用してリモートプロセスをデバッグしています。私はgdbserverを起動して入力を待っている間にプロセスにgdbserverを付けることができます。gdbserverを起動時にプロセスに接続するにはどうすればよいですか?
しかし、gdbserverが起動されている間、そのプロセスにgdbserverをアタッチしたいと思います。プロセスはシェルスクリプトを介して起動され、このプロセスの開始方法を変更することはできません。つまり、シェルスクリプトを変更してgdbserverを呼び出してプロセスを起動することはできません。
gdbserverを起動するとすぐにこのプロセスにどのようにアタッチできますか?
編集:main()
の開始時に待機ループを作成できます。例えば、所定の場所にファイルを見つけるまで待機ループ:
#include <unistd.h>
int main() {
while(access("/home/username/CONTINUE", F_OK) == -1)
sleep(1);
/*
...all the rest of main()
*/
return 0;
}
我々は、プロセスがこのループでビジーである間、gdbserverを取り付ける必要に応じて、ブレークポイントを設定し、ループを終了するtouch /home/username/CONTINUE
を言うことができます。しかし、これは私たちがソースコードにアクセスし、バイナリをコンパイルし、それをターゲットマシンに置くことができるようにする必要があります。私はこれよりも優れた、簡単な方法を探しています。
私はあなたが複雑な考えをしていると信じています:-D。私の答えを見てください。 – user0042
リモートシステムでsystemtapを実行できますか?そうであれば、Tom Tromeyの[preattach](https://github.com/tromey/gdb-helpers/blob/master/gdbhelpers/preattach.stp)を実行して、新しいプロセスを開始するとすぐに停止することができます。ソースコードを変更する必要があります。 –