在 Visual Studio 调试器中查看 QObject 的 objectName
View QObject's objectName in Visual Studio Debugger
不幸的是,QObject
没有像人们预期的那样在调试器中可见的 QString
m_objectName
成员。相反,所有的实现数据都隐藏在不透明的指针后面。有什么方法可以在运行时从 Visual Studio 调试器中查看 objectName 吗?
背景:
调试 Qt 应用程序时,特定 QObject 的实例可能有很多,可能很难知道是哪个实例触发了崩溃,因为该信息可能在调用堆栈中不可用。然而,如果它们都被赋予了唯一的 objectNames,理论上可以让人们快速查明有问题的代码区域。
更多详情:
- 我正在使用 Qt 5.9.3 和 Visual Studio 2019
- 我已经为 Visual Studio 安装了
qt5.natvis
(它不会为您安装)
- 我至少要一个可以工作的 watch-expression,它可以粘贴到调试器中,用于任何具有 objectName 的本地
QObject
派生变量,以显示其 objectName。
- 理想的答案还包括更新后的
qt5.natvis
,它显着公开任何局部 QObject
派生变量的 objectName。
调试器不能(不应该?)为了显示目的调用对象的成员函数,因为它可能有副作用。
解决方案是为您感兴趣的类型编写或查找“原生可视化工具”(natvis
)。
幸运的是,Qt 人做到了:https://wiki.qt.io/IDE_Debug_Helpers。
您可以按照此文档做更好的自定义工作:https://docs.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects?view=vs-2019
这可能指向数据成员名称(来自qobject.cpp
)
:
QString QObject::objectName() const
{
Q_D(const QObject);
return d->extraData ? d->extraData->objectName : QString();
}
假设是Debug构建(Qt5Cored.dll
),添加一个变量watch如下:
((Qt5Cored.dll!QObjectPrivate*)myQtObj->d_ptr.d)->extraData->objectName
- 将“
myQtObj
”更改为您希望检查的相关 QObject*
(或派生 class 扩展 QObject
)的局部变量名称
为了开发人员的方便,我将把如何将其添加到 qt5.natvis
作为未来的练习,或者其他回答者可能希望提供该信息。
不幸的是,QObject
没有像人们预期的那样在调试器中可见的 QString
m_objectName
成员。相反,所有的实现数据都隐藏在不透明的指针后面。有什么方法可以在运行时从 Visual Studio 调试器中查看 objectName 吗?
背景:
调试 Qt 应用程序时,特定 QObject 的实例可能有很多,可能很难知道是哪个实例触发了崩溃,因为该信息可能在调用堆栈中不可用。然而,如果它们都被赋予了唯一的 objectNames,理论上可以让人们快速查明有问题的代码区域。
更多详情:
- 我正在使用 Qt 5.9.3 和 Visual Studio 2019
- 我已经为 Visual Studio 安装了
qt5.natvis
(它不会为您安装) - 我至少要一个可以工作的 watch-expression,它可以粘贴到调试器中,用于任何具有 objectName 的本地
QObject
派生变量,以显示其 objectName。 - 理想的答案还包括更新后的
qt5.natvis
,它显着公开任何局部QObject
派生变量的 objectName。
调试器不能(不应该?)为了显示目的调用对象的成员函数,因为它可能有副作用。
解决方案是为您感兴趣的类型编写或查找“原生可视化工具”(natvis
)。
幸运的是,Qt 人做到了:https://wiki.qt.io/IDE_Debug_Helpers。
您可以按照此文档做更好的自定义工作:https://docs.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects?view=vs-2019
这可能指向数据成员名称(来自qobject.cpp
)
:
QString QObject::objectName() const
{
Q_D(const QObject);
return d->extraData ? d->extraData->objectName : QString();
}
假设是Debug构建(Qt5Cored.dll
),添加一个变量watch如下:
((Qt5Cored.dll!QObjectPrivate*)myQtObj->d_ptr.d)->extraData->objectName
- 将“
myQtObj
”更改为您希望检查的相关QObject*
(或派生 class 扩展QObject
)的局部变量名称
为了开发人员的方便,我将把如何将其添加到 qt5.natvis
作为未来的练习,或者其他回答者可能希望提供该信息。