我正试图深入了解KDE 5.6中的错误。无论我如何锁定它,锁屏都会破裂。以下是相关代码:https://github.com/KDE/kscreenlocker/blob/master/abstractlocker.cpp#L51
当我运行KCrash: Application 'kscreenlocker_greet' crashing...
Floating point exception (core dumped)
时,我得到一个输出:
gdb
我正在尝试使用KCrash
运行它来尝试确定错误的确切位置,但我不确定在哪里设置断点以隔离错误。我应该寻找raise()
的电话吗?或者是gdb
来电?我可以让scenarioName
打印导致SIGFPE的相关代码行吗?
感谢您提供任何建议。
答案 0 :(得分:1)
但我不知道在哪里设置断点以隔离错误
您根本不需要设置任何断点:当在GDB下运行的进程遇到致命信号(例如SIGFPE
)时,操作系统会注意到调试器正在跟踪该进程,并通知调试器(而不是终止进程)。这反过来导致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 --args /usr/lib/kscreenlocker_greet --testing
(gdb) run