关于在Linux下如何排查Qt启动过程中错误的问题
设置环境变量:export QT_DEBUG_PLUGINS=1
效果:
QMetaObject::connectSlotsByName: No matching signal for on_pushButton_clearBak_clicked()
xinke@xinke-FT2004:~/桌面/lijing/PTFEditor (qt5.9.5)$ source /etc/profile
xinke@xinke-FT2004:~/桌面/lijing/PTFEditor (qt5.9.5)$ ./PTFEditorUI
QFactoryLoader::QFactoryLoader() checking directory path “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/platforms” …
QFactoryLoader::QFactoryLoader() looking at “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/platforms/libqlinuxfb.so”
Found metadata in lib /home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/platforms/libqlinuxfb.so, metadata=
{
“IID”: “org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3”,
“MetaData”: {
“Keys”: [
“linuxfb”
]
},
“className”: “QLinuxFbIntegrationPlugin”,
“debug”: false,
“version”: 329989
}
Got keys from plugin meta data (“linuxfb”)
QFactoryLoader::QFactoryLoader() looking at “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/platforms/libqminimal.so”
Found metadata in lib /home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/platforms/libqminimal.so, metadata=
{
“IID”: “org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3”,
“MetaData”: {
“Keys”: [
“minimal”
]
},
“className”: “QMinimalIntegrationPlugin”,
“debug”: false,
“version”: 329989
}
Got keys from plugin meta data (“minimal”)
QFactoryLoader::QFactoryLoader() looking at “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/platforms/libqoffscreen.so”
Found metadata in lib /home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/platforms/libqoffscreen.so, metadata=
{
“IID”: “org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3”,
“MetaData”: {
“Keys”: [
“offscreen”
]
},
“className”: “QOffscreenIntegrationPlugin”,
“debug”: false,
“version”: 329989
}
Got keys from plugin meta data (“offscreen”)
QFactoryLoader::QFactoryLoader() looking at “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/platforms/libqvnc.so”
Found metadata in lib /home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/platforms/libqvnc.so, metadata=
{
“IID”: “org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3”,
“MetaData”: {
“Keys”: [
“vnc”
]
},
“className”: “QVncIntegrationPlugin”,
“debug”: false,
“version”: 329989
}
Got keys from plugin meta data (“vnc”)
QFactoryLoader::QFactoryLoader() looking at “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/platforms/libqxcb.so”
Found metadata in lib /home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/platforms/libqxcb.so, metadata=
{
“IID”: “org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3”,
“MetaData”: {
“Keys”: [
“xcb”
]
},
“className”: “QXcbIntegrationPlugin”,
“debug”: false,
“version”: 329989
}
Got keys from plugin meta data (“xcb”)
loaded library “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/platforms/libqxcb.so”
loaded library “Xcursor”
QFactoryLoader::QFactoryLoader() checking directory path “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/xcbglintegrations” …
QFactoryLoader::QFactoryLoader() checking directory path “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/platformthemes” …
QFactoryLoader::QFactoryLoader() checking directory path “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/platforminputcontexts” …
QFactoryLoader::QFactoryLoader() checking directory path “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/styles” …
QFactoryLoader::QFactoryLoader() checking directory path “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/iconengines” …
QFactoryLoader::QFactoryLoader() checking directory path “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats” …
QFactoryLoader::QFactoryLoader() looking at “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqgif.so”
Found metadata in lib /home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqgif.so, metadata=
{
“IID”: “org.qt-project.Qt.QImageIOHandlerFactoryInterface”,
“MetaData”: {
“Keys”: [
“gif”
],
“MimeTypes”: [
“image/gif”
]
},
“className”: “QGifPlugin”,
“debug”: false,
“version”: 329989
}
Got keys from plugin meta data (“gif”)
QFactoryLoader::QFactoryLoader() looking at “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqicns.so”
Found metadata in lib /home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqicns.so, metadata=
{
“IID”: “org.qt-project.Qt.QImageIOHandlerFactoryInterface”,
“MetaData”: {
“Keys”: [
“icns”
],
“MimeTypes”: [
“image/x-icns”
]
},
“className”: “QICNSPlugin”,
“debug”: false,
“version”: 329989
}
Got keys from plugin meta data (“icns”)
QFactoryLoader::QFactoryLoader() looking at “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqico.so”
Found metadata in lib /home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqico.so, metadata=
{
“IID”: “org.qt-project.Qt.QImageIOHandlerFactoryInterface”,
“MetaData”: {
“Keys”: [
“ico”,
“cur”
],
“MimeTypes”: [
“image/vnd.microsoft.icon”
]
},
“className”: “QICOPlugin”,
“debug”: false,
“version”: 329989
}
Got keys from plugin meta data (“ico”, “cur”)
QFactoryLoader::QFactoryLoader() looking at “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqjpeg.so”
Found metadata in lib /home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqjpeg.so, metadata=
{
“IID”: “org.qt-project.Qt.QImageIOHandlerFactoryInterface”,
“MetaData”: {
“Keys”: [
“jpg”,
“jpeg”
],
“MimeTypes”: [
“image/jpeg”,
“image/jpeg”
]
},
“className”: “QJpegPlugin”,
“debug”: false,
“version”: 329989
}
Got keys from plugin meta data (“jpg”, “jpeg”)
QFactoryLoader::QFactoryLoader() looking at “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqsvg.so”
Found metadata in lib /home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqsvg.so, metadata=
{
“IID”: “org.qt-project.Qt.QImageIOHandlerFactoryInterface”,
“MetaData”: {
“Keys”: [
“svg”,
“svgz”
],
“MimeTypes”: [
“image/svg+xml”,
“image/svg+xml-compressed”
]
},
“className”: “QSvgPlugin”,
“debug”: false,
“version”: 329989
}
Got keys from plugin meta data (“svg”, “svgz”)
QFactoryLoader::QFactoryLoader() looking at “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqwbmp.so”
Found metadata in lib /home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqwbmp.so, metadata=
{
“IID”: “org.qt-project.Qt.QImageIOHandlerFactoryInterface”,
“MetaData”: {
“Keys”: [
“wbmp”
],
“MimeTypes”: [
“image/vnd.wap.wbmp”
]
},
“className”: “QWbmpPlugin”,
“debug”: false,
“version”: 329989
}
Got keys from plugin meta data (“wbmp”)
QFactoryLoader::QFactoryLoader() looking at “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqwebp.so”
Found metadata in lib /home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqwebp.so, metadata=
{
“IID”: “org.qt-project.Qt.QImageIOHandlerFactoryInterface”,
“MetaData”: {
“Keys”: [
“webp”
],
“MimeTypes”: [
“image/webp”
]
},
“className”: “QWebpPlugin”,
“debug”: false,
“version”: 329989
}
Got keys from plugin meta data (“webp”)
loaded library “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqgif.so”
loaded library “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqicns.so”
loaded library “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqico.so”
loaded library “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqjpeg.so”
loaded library “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqsvg.so”
loaded library “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqwbmp.so”
loaded library “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/imageformats/libqwebp.so”
loaded library “libdbus-1”
QMetaObject::connectSlotsByName: No matching signal for on_pushButton_clearBak_clicked()
QFactoryLoader::QFactoryLoader() checking directory path “/home/xinke/桌面/lijing/PTFEditor (qt5.9.5)/accessible” …
可以看出程序启动前加载的过程;
读取可执行文件的依赖库
readelf -d xxxx(可执行文件名)
效果:
Dynamic section at offset 0x1b8018 contains 33 entries:
标记 类型 名称/值
0x0000000000000001 (NEEDED) 共享库:[libzint.so.2.9]
0x0000000000000001 (NEEDED) 共享库:[libQt5Widgets.so.5]
0x0000000000000001 (NEEDED) 共享库:[libQt5Gui.so.5]
0x0000000000000001 (NEEDED) 共享库:[libQt5Core.so.5]
0x0000000000000001 (NEEDED) 共享库:[libpthread.so.0]
0x0000000000000001 (NEEDED) 共享库:[libstdc++.so.6]
0x0000000000000001 (NEEDED) 共享库:[libm.so.6]
0x0000000000000001 (NEEDED) 共享库:[libgcc_s.so.1]
0x0000000000000001 (NEEDED) 共享库:[libc.so.6]
0x000000000000000f (RPATH) Library rpath: [.:/opt/PMY/aarch64/qt595-aarch64/lib]
0x000000000000000c (INIT) 0x411990
0x000000000000000d (FINI) 0x4360c4
0x0000000000000019 (INIT_ARRAY) 0x5c7000
0x000000000000001b (INIT_ARRAYSZ) 16 (bytes)
0x000000000000001a (FINI_ARRAY) 0x5c7010
0x000000000000001c (FINI_ARRAYSZ) 8 (bytes)
0x0000000000000004 (HASH) 0x400260
0x0000000000000005 (STRTAB) 0x405d28
0x0000000000000006 (SYMTAB) 0x401c78
0x000000000000000a (STRSZ) 30309 (bytes)
0x000000000000000b (SYMENT) 24 (bytes)
0x0000000000000015 (DEBUG) 0x0
0x0000000000000003 (PLTGOT) 0x5c8750
0x0000000000000002 (PLTRELSZ) 12360 (bytes)
0x0000000000000014 (PLTREL) RELA
0x0000000000000017 (JMPREL) 0x40e948
0x0000000000000007 (RELA) 0x40d9e8
0x0000000000000008 (RELASZ) 3936 (bytes)
0x0000000000000009 (RELAENT) 24 (bytes)
0x000000006ffffffe (VERNEED) 0x40d8f8
0x000000006fffffff (VERNEEDNUM) 6
0x000000006ffffff0 (VERSYM) 0x40d38e
0x0000000000000000 (NULL) 0x0
可以查看到rpath指向位置;
ldd xxx(可执行文件名) 可以查看依赖库
file xxx(可执行文件名) 可以查看指令集
关于Pro文件编译知识点:
QMAKE_LFLAGS +=-Wl,-rpath=./lib
功能:
程序加载时,先从当前目录下的lib目录中加载;