2016-12-28 22 views
2

C++コードから生成されたexecutable_fileをデバッグしていました。 GDBセッションの途中で、source.cppファイルを変更し、それらを再コンパイルして新しいexecutable_fileを再生成しました。今、私のシステムから古いファイルを削除しても、GDBは古いファイルexecutable_fileを実行しています。これはどのように可能ですか?どうすればGDBに新しいexecutable_fileを実行させることができますか?GDBは削除された実行可能ファイルを実行しています

UPDATE:

システムを再起動した後、すべては最初のコンパイルのためにうまく働いた、と私は新しいexecutable_fileを実行することができます。しかし、私は次の編集のために同じ問題を守っています。それにもかかわらず、私がexecutable.oを取り除いて、すべてを再コンパイルするときれいに見えます。

これは私のメイクファイルの問題のためですか?それとも、私のUnixシステムで何か壊れてしまった?

+1

デバッグを閉じて再起動しましたか? –

+0

@Alexander O'Maraはい、問題は解決しません。 – Admia

答えて

1

プログラム、ライブラリなどがメモリにロードされると、削除することはできますが実行することはできます。プログラムを閉じて再起動すると、新しいプログラムが実行されます。

これは問題がある場合の例です。は、私のLinuxボックスを実行するために必要なライブラリまたは実行可能ファイルを何度も削除しています。コンピュータを再起動すると、すぐに私はそれを台無しにしたことに気づきます...

楽しい時。一例として


/* 
Compile me. 
Run the executable. 
While the program is running, delete the executable/binary. 
The program will continue printing the message. 
*/ 

#include <stdio.h> 
#include <unistd.h> 

int main() { 
    while (1) { 
     printf("I'm still running.\n"); 
     sleep(2); 
     } 

    return 0; 
    } 

あなたの質問に答えるために、は、現在実行中のgdbセッションを閉じます。次に、新しい実行可能ファイルを使用して新しいファイルを起動します。


PS:あなたはそれを削除する前に、あなたがそれを開始した場合、あなたはまだそれを実行しています。それ古いプログラムであるところ。)

+0

今回は、自分のプログラムから、Unix/Linuxが古い実行可能ファイルを実行していることを示す適切な出力を得ることができたことは幸運でした。私のプログラムに何の出力もない場合はどうすればいいですか?その場合、どうすればUnixが新しいファイルを実行していることを確認できますか?別のプログラムがそれを使用しているときに、何かを削除する機会が常にあります。 – Admia

+1

@Admia、応答が遅れて申し訳ありません。あなたはどんなことをしていますか?このシステムプログラミング、実験、...? –

+0

これはC++による科学的プログラミングです。私はmakefileの依存関係を変更することで問題を解決したと思う。 – Admia

2

あなたが使われているファイルを削除すると、Unixのディレクトリからファイルを削除しますが、最後のユーザーがそれを完了するまでファイルがまだ存在しています。

強制的にgdb(またはこの状況のアプリケーション)に最新のバージョンを使用させるには、アプリケーションを再起動します(オプションの場合は、アプリケーションに再ロードします)。

比較のポイントとして、Windowsで実行していた場合、ファイルが既に使用されている間に実行可能ファイルを再生成するとエラーが発生します。

更新:これを頻繁に行う場合は、生成された実行可能ファイルにリビジョン番号を追加するようにメークファイルを変更することを検討してください。各実行ファイルには一意の名前が付いており、これは使用しているファイルに関する混乱を避けるのに役立ちます。

関連する問題