qt - 调试很慢

标签 qt gdb

我已经交叉编译了 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 默认 sysroottarget:,意思是“从目标获取文件”。如果您在本地调试,这只是本地文件系统访问;但是如果你正在远程调试并且连接速度很慢,这可能会有点痛苦。为了加快速度,我们的想法是保留一份您需要的所有文件的本地副本,然后使用 set sysroot 将 gdb 指向这个本地副本。

这种方法的主要问题是,如果您的本地副本与远程副本不同步,您最终可能会混淆 gdb 并得到无意义的结果。我不确定,但也许启用 build-ids 可以在一定程度上缓解这个问题(当然理论上 gdb 可以检测到 build-id 不匹配并发出警告,我只是不记得它是否确实如此)。

关于qt - 调试很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38080460/

相关文章:

c++ - 错误 : QApplication: No such file or directory?

c - gdb 'info types' 不打印 C 结构

qt - 如何使 Qt 中的选项卡小部件的内容自动调整大小?

objective-c - 从 GDB 获取值后如何编辑二进制文件

c++ - 有没有办法在程序运行时更改 linux 上发布代码中的成员变量?

android - 在*设备*(不是模拟器)上调试 Android 中的 native 代码

c++ - 我使用 gdb 跟踪 'catch' 和 'syscall' 失败,它报告找不到 'brk'?

c++ - 在 C++ 中使用自定义新建/删除和 Qt 的段错误

c++ - QByteArray 转换为十六进制失败

qt - Qlabel 和 Qtimer(需要让图像闪烁)