(gdb) s
Things:action (this=0x7fffffffdce0, packet=0x62c980) at file:41
41 if(thing->work(data)) {
(gdb) s
Program received signal SIGSEGV, Segmentation fault.
0x00000000004040e1 in Things:action (this=0x7fffffffdce0, packet=0x62c980) at file:41
41 if(thing->work(data)) {
backtrace
では、仕事(データ)の呼び出しは最後のものです。 GDBが管理するプロセスがwork(data)
と入力される前に、セグメンテーションが発生しているように見えます。 list
には、作業(データ)の宣言がないため、バックトレースと最新の手順で示されているよりも多くのコードが実行されたと推測されます。gdbがセグメンテーション違反を検出しました。正確な情報源を特定するにはどうすればいいですか?
- そのセグメンテーション違反は、(「のextern C」のない、またはいくつかの他の製剤)の悪い方法で、関数の引数として渡される悪いポインタから来ることができますか? (関数コードが実行されていないと仮定して)
- 詳細トレースを取得する方法は、関数を入力した後に
work()
コードが実行されたか、またはプロセスが関数を入力しようとしたときにエラーが発生しました。 libcの引数?
'this 'は有効ですか? '0x7fffffffdce0'は私にとってかなり高いようです。 – icecrime
ええと...本当に 'thing'は無効なポインタかもしれないようです。 – birryree
@icecrime:うん、「もの」が詰まった。 –