2012-01-07 6 views
3

これは私のコアファイルの一部です:そのアドレスに読み取り/書き込みしようとしているときにコアファイルのアドレスは何ですか?

[New Thread 30385] 
[New Thread 30383] 
[New Thread 30381] 
[New Thread 30379] 
[New Thread 30378] 
[New Thread 30270] 
[New Thread 30268] 
Core was generated by `test'. 
Program terminated with signal 11, Segmentation fault. 
#0 0x001cd1a6 in ??() 

それは0x001cd1a6やプログラムがクラッシュした時に私のプログラムがクラッシュを意味するのでしょうか?
そのアドレスには実行可能コードはありません。
別のことは、クラッシュするたびに別のアドレスを与えることです。

答えて

3

それははい0x001cd1a6

で私のプログラムがクラッシュを意味しています。

そのアドレスには実行可能コードはありません。

まあ、それは確かに(違法な命令のため)クラッシュを引き起こすでしょう。

もう1つのことは、クラッシュするたびに別のアドレスを指定することです。

プログラムにはスレッドが含まれているため、スレッドのスケジュールが異なるため、割り当てパターンは実行されるたびに異なる可能性があります。

また、Linuxではアドレスのランダム化が行われるため、スレッド化されていないプログラムを複数回実行すると、異なるアドレスになります。一方、GDBはランダム化を無効にするので、GDBの下で非スレッドプログラムを実行すると、毎回同じ場所でクラッシュするはずです。

無効化された(削除された)オブジェクトに対して仮想関数を呼び出す可能性があります。 where GDBコマンドを使用してを見つけ出す方法あなたは無効なアドレスになります。

UNIXでは実行可能ファイルtestを呼び出しません。これは多くのシェルスクリプトで使用される/usr/bin/testと競合します。

+0

彼はそれをインストールしていない限り、それは 'PATH'にはありません、それは大したことではありません。そして、誰がテストプログラムにそれを行いますか?さらに、 'test'は通常シェル組み込みです。 – Dave

+0

+1。 '/ usr/bin/test'との名前の競合について言及できれば、私はもう一度upvoteします。無限のデバッグを引き起こすような予期せぬことです。 – jmkeyes

+0

雇用されたロシア語、私はあなたがデバッグ本を書くべきだと思います。私は確かにそれを購入するだろう。私はあなたの答えをここで観察してきました。そして、彼らは何も優れているとは言えません。どうもありがとうございました。 –

関連する問題