我使用Qt Creator 3.2.1和gdb 7.6.2(来自QorIQ SDK 1.8的powerpc64-fsl-linux-gdb
)来调试交叉编译的应用程序。
在我的ppc64测试机器(Yocto)上运行gdbserver:gdbserver :666 /path/to/myapp
然后我在我的x86_64 dev机器(Debian)上使用Qt Creator连接到gdbserver。我已经指定了Kit(sysroot是/opt/fsl-networking/QorIQ-SDK-V1.8/sysroots/ppc64e6500-fsl-linux
),工具链gdb等等......到目前为止这个工作原理。我可以调试任何应用程序。
但是如果我的应用程序动态链接到库并且我想调试这个库(/path/to/libmylib.so
),则Qt Creator中的gdb无法进入 mylib 的断点。
我想做什么使用Qt Creator 就像这样:
powerpc64-fsl-linux-gdb /path/to/myapp
然后输入
set solib-search-path /path/to/mylib/
target remote 192.168.120.211:666
break MyLibraryFunctionIWantToDebug
run
c
日志:
GNU gdb (GDB) 7.6.2
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-fslsdk-linux --target=powerpc64-fsl-linux".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /path/to/myapp...done.
(gdb) show solib-search-path
The search path for loading non-absolute shared library symbol files is .
(gdb) set solib-search-path /path/to/mylib/
(gdb) show solib-search-pat
The search path for loading non-absolute shared library symbol files is /path/to/mylib/.
(gdb) target remote 192.168.120.211:666
Remote debugging using 192.168.120.211:666
(gdb) break MyLibraryFunctionIWantToDebug
Breakpoint 1 at 0x10001088: file /path/to/myapp/myapp.c, line 196.
(gdb) run
The "remote" target does not support "run". Try "help target" or "continue".
(gdb) c
...
到目前为止的研究:
set solib-search-path /path/to/mylib/
命令放入.gdbinit。在Qt Creator中,每个.gdbinit文件都被忽略。我尝试了多个位置,例如Qt创建者中的~/.gdbinit
,/path/to/myapp/.gdbinit
,命令行参数选项:-x ~/.gdbinit
,工具&gt;选项&gt;调试器将命令放入每个附加字段。无效: - (在使用共享库时,如何在Qt Creator中使用gdb进行调试?
答案 0 :(得分:0)
也许它已经改变了QtCreator 3.6(我正在使用的),但是如果我将set solib-search-path
命令放在“附加附加命令”恶魔并且只有那个字段,我就让它工作了。
当然,我的情况可能不完全适用于你的情况,因为它不是完整的交叉编译,而是在不同版本的Linux上运行GDB而不是远程目标运行。