在 C++ 的 Netbeans 调试器中查看动态类型
Viewing dynamic type in Netbeans debugger for C++
我有一个 class 层次结构,它以
开头
class Command { ... }
然后有子classes
class RunCommand : public Command { ... }
在 Netbeans 调试器中,当查看类型为 Command *
的变量时,我想查看变量的 实际 类型,
Command * command [RunCommand]
然后可以展开字段查看状态。这可能吗?
我做了一些研究,似乎 NetBeans 没有这样的内置功能。
不用担心!您可以通过为要查找其类型的变量设置自定义观察点来实现相同的效果。
我要调试的代码:
#include <typeinfo>
#include <iostream>
using namespace std;
class Command {
public:
virtual void bla() {
cout << "Base";
}
};
class RunCommand : public Command {
public:
void bla() {
cout << "Child";
}
};
int main(int argc, char** argv) {
Command * base_command = new Command();
Command * run_command = new RunCommand();
cout << "Breakpoint";
delete base_command;
delete run_command;
return 0;
}
请注意,我已经包含了 <typeinfo>
。我将停下来查看行打印 "Breakpoint" 处的变量。
这是观察点的样子:
手表表情为:
typeid(*base_command).__name
typeid(*run_command).__name
工作原理:
我正在使用typeid operator。我正在向它传递我想要查看其类型的对象。请注意,在我们的例子中,我们必须取消引用指针才能到达对象。运算符 returns 某种具有成员 __name
的 typeid
对象。该字段似乎包含传递给 typeid
.
的对象的运行时类型
我不知道这有多便携。我已经使用 NetBeans 8.0.2 和 gcc 4.8.2 完成了上述操作。
我有一个 class 层次结构,它以
开头class Command { ... }
然后有子classes
class RunCommand : public Command { ... }
在 Netbeans 调试器中,当查看类型为 Command *
的变量时,我想查看变量的 实际 类型,
Command * command [RunCommand]
然后可以展开字段查看状态。这可能吗?
我做了一些研究,似乎 NetBeans 没有这样的内置功能。
不用担心!您可以通过为要查找其类型的变量设置自定义观察点来实现相同的效果。
我要调试的代码:
#include <typeinfo>
#include <iostream>
using namespace std;
class Command {
public:
virtual void bla() {
cout << "Base";
}
};
class RunCommand : public Command {
public:
void bla() {
cout << "Child";
}
};
int main(int argc, char** argv) {
Command * base_command = new Command();
Command * run_command = new RunCommand();
cout << "Breakpoint";
delete base_command;
delete run_command;
return 0;
}
请注意,我已经包含了 <typeinfo>
。我将停下来查看行打印 "Breakpoint" 处的变量。
这是观察点的样子:
手表表情为:
typeid(*base_command).__name
typeid(*run_command).__name
工作原理:
我正在使用typeid operator。我正在向它传递我想要查看其类型的对象。请注意,在我们的例子中,我们必须取消引用指针才能到达对象。运算符 returns 某种具有成员 __name
的 typeid
对象。该字段似乎包含传递给 typeid
.
我不知道这有多便携。我已经使用 NetBeans 8.0.2 和 gcc 4.8.2 完成了上述操作。