我已经交叉编译了 Qt 并创建了 SD 卡镜像并使用 losetup
进行了挂载。与直接 sshfs
挂载相比,Compiation 现在要快得多。应用程序运行正常。现在,我想调试它非常慢,它似乎正在将文件复制回开发机器进行调试。我看到这个建议:
来自远程目标的文件传输可能很慢。请改为使用“set sysroot”访问本地文件。
我正在使用 gdb-multiarch
并且有 gdbserver
(在目标板上)。
我有点迷路了。在哪里设置这个选项?我已经为二进制文件提供了 --sysroot
参数,但没有用。非常感谢任何帮助。
更新:使用Qt Creator进行开发。
最佳答案
sysroot
是一个 gdb 设置。您可以使用 set sysroot
命令在 gdb 中设置它。例如:
(gdb) help set sysroot
Set an alternate system root.
The system root is used to load absolute shared library symbol files.
For other (relative) files, you can add directories using
`set solib-search-path'.
此设置控制 gdb 如何尝试查找它需要的各种文件,尤其是您正在调试的可执行文件和共享库。
最新版本的 gdb 默认 sysroot
为 target:
,意思是“从目标获取文件”。如果您在本地调试,这只是本地文件系统访问;但是如果你正在远程调试并且连接速度很慢,这可能会有点痛苦。为了加快速度,我们的想法是保留一份您需要的所有文件的本地副本,然后使用 set sysroot
将 gdb 指向这个本地副本。
这种方法的主要问题是,如果您的本地副本与远程副本不同步,您最终可能会混淆 gdb 并得到无意义的结果。我不确定,但也许启用 build-ids 可以在一定程度上缓解这个问题(当然理论上 gdb 可以检测到 build-id 不匹配并发出警告,我只是不记得它是否确实如此)。
关于qt - 调试很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38080460/