我有一个Qt应用程序正在显示WebView(基于Webkit)。我正在尝试使用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中崩溃的任何帮助。
GDB加载错误的库是可能的。
一种简单的查找方法是在main()
上设置一个断点-届时您希望库将内存映射到进程中。
[您可能可以使用GDB进行检查,或者在目标系统上获取shell并运行
losf -p <process_id>
这将列出该进程拥有的所有打开的文件句柄-包括所有映射的内存共享库。
如果您以某种方式使用开发主机的库,则肯定会对此进行解释。