2016-03-30 2 views
0

私はKDE 5.6のバグの底に到達しようとしています。ロッカー画面は、どのようにロックしても破損します。ここでは、関連するコードは次のとおりです。https://github.com/KDE/kscreenlocker/blob/master/abstractlocker.cpp#L51大規模で馴染みのないソフトウェアプロジェクトでSIGFPEをデバッグするにはどうすればよいですか?

私は/usr/lib/kscreenlocker_greet --testingを実行すると、私はの出力を得る:

KCrash: Application 'kscreenlocker_greet' crashing... 
Floating point exception (core dumped) 

私はバグの正確な位置を試してみて、ピンにgdbでそれを実行しようとしているが、私よバグを隔離するためにどこにブレークポイントを設定するのか分かりません。 KCrashへの通話をお探しですか?またはraise()と呼んでいますか? gdbにSIGFPEを引き起こす関連するコード行を表示することはできますか?

アドバイスをいただきありがとうございます。

+0

実行プログラムを実行したときに、それがクラッシュし、「BT」と入力します。 – dbrank0

答えて

1

が、私はあなたがすべてで任意のブレークポイントを設定する必要はありませんバグ

を分離するために、どこにブレークポイントを設定するかわからない:GDBの下で実行中のプロセスが致命的に遭遇したとき(例えば、SIGFPE)、OSはデバッガによってプロセスがトレースされていることに気付き、プロセスを終了する代わりにデバッガに通知します。これはGDBを停止させ、追加のコマンドを要求します。当時ので、クラッシュの原因を調べたり理解したりすることができます。

例:ここでは

cat -n t.c 
    1 #include <fenv.h> 
    2 
    3 int foo(double d) { 
    4 return 1/d; 
    5 } 
    6 
    7 int main() 
    8 { 
    9 feenableexcept(FE_DIVBYZERO); 
    10 return foo(0); 
    11 } 

gcc -g t.c -lm 
./a.out 
Floating point exception 

gdb -q ./a.out 
(gdb) run 
Starting program: /tmp/a.out 

Program received signal SIGFPE, Arithmetic exception. 
0x000000000040060e in foo (d=0) at t.c:4 
4  return 1/d; 
(gdb) bt 
#0 0x000000000040060e in foo (d=0) at t.c:4 
#1 0x0000000000400635 in main() at t.c:10 
(gdb) q 

、あなたが見ることができるよう、GDBはSIGFPEが配信されたときに停止し、あなたの周りを見て、クラッシュを理解することができます。

あなたのケースでは、あなたが最初のKDE用のdebuginfoシンボルをインストールしたい、その後、gdbの下

gdb --args /usr/lib/kscreenlocker_greet --testing 
(gdb) run