本页内容

调试器故障排除

本节列出了您在调试过程中可能遇到的一些典型问题及其解决方案。

无法启动调试器

某些防病毒应用程序不允许调试器检索数据。例如,在 Windows 系统上,如果开发电脑上安装了 Avira 防病毒软件,启动调试器可能会失败并显示以下消息:被调试的进程因收到来自操作系统的信号而停止。信号名称:?信号含义:未知信号。

在某些设备(如 Wacom 数位板)上,正在运行的进程可能会阻止调试器的启动。请停止所有正在运行的进程,然后重新启动调试器。

调试器未触发断点

您可能创建了一个不包含调试信息的发布版构建。GNU 编译器集合 (GCC) 的调试版构建会在编译器命令行中包含-g 选项。请检查“编译输出”中是否包含此选项。如果没有,请在Projects 模式下调整您的构建设置。

调试器无法正常工作

如果调试器无法正常工作,请尝试以下操作:

  1. 选择““运行”按钮 ”(Run ),以确认构建和运行套件选择器已选定可运行的目标,且您可以运行该应用程序。
  2. 确保调试器已正确配置
  3. 在“Debug ”模式下,转至“View ” > “Views ” > “Debugger Log ”以打开“调试器日志”视图。浏览右侧窗格的内容以找出问题所在。 在向Qt Creator 邮件列表(qt-creator@qt-project.org)提交与调试器相关的问题时,请务必附上该窗格的内容;或在 Libera.Chat 的 #qt-creator 频道通过 IRC 提问前,请先将内容粘贴到代码粘贴服务中

    注意:错误 135 通常表示无法找到依赖的 DLL。

指针变量成员不会直接显示

当您使用“Locals ”和“Expressions ”视图检查指针变量并展开变量树项时,会显示另一个树项级别。要直接显示指针变量的成员,请在“Locals ”和“Expressions ”视图的上下文菜单中选择“Dereference Pointers Automatically ”。

如果完全无法查看变量,请确认您已选择了调试构建配置。

结构体成员未按结构体布局排序

默认情况下,结构体成员按字母顺序显示。若要检查内存中的实际布局,请在“Locals ”和“Expressions ”视图的上下文菜单中取消选中“Sort Members of Classes and Structs Alphabetically ”。

内置调试器在启动和运行时速度较慢

与加载调试信息相关的运行缓慢现象难以完全避免。以下各节将介绍一些可能的解决方案。

缓存 GDB 符号索引

当使用 GDB 作为后端时,您可以自动将 GDB 的符号索引副本保存到磁盘缓存中,并在将来加载同一二进制文件时从中检索。请转至“Preferences ” > “Debugger ” > “GDB ” > “Use automatic symbol cache ”。

“调试器”首选项中的“GDB”选项卡

尽量减少断点数量

部分调试速度变慢的问题源于调试器内部对断点的维护(在某些情况下,每次步进都需要插入并再次移除所有断点),以及每次步进后对表达式的求值。我们建议您尽量减少断点和监视表达式的数量。

清理构建

如果过时的.pdb 文件导致调试变慢,请尝试进行干净构建。

禁用增量链接

增量链接可能会影响调试。如果“调试器日志”视图中显示“无法验证模块校验和”的消息,请禁用增量链接。

当使用 CMake 作为构建系统时,请在项目的CMakeLists.txt 文件中添加以下行:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /INCREMENTAL:NO" )

当使用 qmake 作为构建系统时,请在项目的.pro 文件中添加以下行:

QMAKE_LFLAGS_DEBUG += /INCREMENTAL:NO

在 Linux 上调试器无法附加到正在运行的进程

GDB 使用 `ptrace ` 挂接到正在运行的进程上。某些 Linux 发行版不允许此操作,这将阻止所有直接挂接到现有进程或使用 `Qt Creator` 中 `Run in terminal ` 选项的尝试。

具体原因详见KernelHardening

然而,这项安全措施的实用性似乎值得怀疑,因为该功能很容易被禁用。拥有 root 权限时,您可以通过将0 写入/proc/sys/kernel/yama/ptrace_scope 来临时禁用该功能,或通过修改/etc/sysctl.d/10-ptrace.conf 中的值来永久禁用该功能。即使您没有提升的权限,也可以通过预加载一个调用prctl(0x59616d61, getppid(), 0, 0, 0); 的库来禁用该功能。Qt Creator 附带了这样的库:将$QTCREATORDIR/lib/qtcreator/libptracepreload.so 添加到LD_PRELOAD 环境变量中。

另请参阅 《如何:调试调试过程和 调试器》。

Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.