应用程序在GDB中崩溃,但在正常运行时不会崩溃,libcrypto中会发生崩溃

时间:2019-10-02 18:12:49

标签: qt ssl arm gdb webkit

我有显示WebView(基于Webkit)的Qt应用程序。我正在尝试使用gdb对其进行调试。当我通过gdb运行应用程序时,它几乎立即崩溃。在gdb之外执行时,该应用程序可以正常运行。

崩溃的原因是:

Thread 1 "myapp" received signal SIGILL, Illegal instruction.
0x4a4d9a88 in ?? () from /usr/lib/libcrypto.so.1.0.2

由于错误是SIGILL,是否gdb可能从错误的路径加载了lib?

该应用程序非常简单,只显示特定URL的WebView:

    ui->webView->page()->mainFrame()->setUrl(QUrl(urlString));

执行上述行后,应用程序在gdb中崩溃。

环境是在arm体系结构上运行linux的嵌入式系统:

Linux hh4 3.1.10-2.8.5+g841700f8a2ea #1 SMP PREEMPT Fri May 3 18:48:07 UTC 2019 armv7l GNU/Linux

希望能帮助您理解为什么应用程序在gdb中崩溃的原因。

1 个答案:

答案 0 :(得分:0)

GDB可能加载了错误的库。

一种简单的查找方法是在main()上设置一个断点-届时您希望库可以将内存映射到进程中。

您可能可以使用GDB进行检查,或者在目标系统上获取一个Shell并运行

losf -p <process_id>

这将列出该进程拥有的所有打开的文件句柄-包括所有内存映射的共享库。

如果您以某种方式使用开发主机的库,则肯定可以解释它。