我有显示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中崩溃的原因。
答案 0 :(得分:0)
GDB可能加载了错误的库。
一种简单的查找方法是在main()
上设置一个断点-届时您希望库可以将内存映射到进程中。
您可能可以使用GDB进行检查,或者在目标系统上获取一个Shell并运行
losf -p <process_id>
这将列出该进程拥有的所有打开的文件句柄-包括所有内存映射的共享库。
如果您以某种方式使用开发主机的库,则肯定可以解释它。