调试很慢

时间:2016-06-28 15:31:55

标签: qt gdb

我已经交叉编译了Qt并创建了SD卡图像并使用losetup挂载。与直接sshfs mount相比,现在的编译速度要快得多。应用运行正常。现在,我想调试哪个死得很慢,看起来它正在将文件复制回dev机器进行调试。我看到了这个建议:

File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.

我正在使用gdb-multiarch并且已经gdbserver(在目标板上)。

我有点迷失在这里。在哪里设置此选项?我已经为二进制文件提供了--sysroot参数但没有用。任何帮助都非常感谢。

更新:使用Qt Creator进行开发。

2 个答案:

答案 0 :(得分:2)

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-id可以稍微缓解这个问题(当然理论上gdb可以检测build-id不匹配并发出警告,我只是不记得它是否确实存在)。

答案 1 :(得分:0)

Tom Tromey 建议在调试器中添加 set sysroot {my sysroot local path} 作为启动命令对我有用。

sysroot setup