到目前为止,我使用调试的唯一方法是知道异常发生在哪一行以及成员的值。我不知道如何看待这样的物体:
Name Variable
objA 0x10cf990
即使在光标到达该行之前,objA也包含垃圾值。如果你无法读取价值,那又有什么意义呢?有没有办法查看对象的数据?
例如,
class A{
name = "im a";
String getName(){
return name;
}
}
main(){
A* objA = new A(); //breakpoint here
}
在调试时,我可以看到成员的值和objA函数的返回值吗?
像
Name Variable
objA 0x10cf990
--name im a
--getName() im a
我想我之前尝试过这样的事情。我不太确定。
系统:Linux Mint 15 64bit IDE:Kdevelop4(我认为它的调试器是GDB)
答案 0 :(得分:0)
您最初在objA
中看到垃圾值,因为它尚未初始化。在此行上 后,它将更改为有效值。
A* objA = new A();
新的有效值对您来说似乎也很垃圾,但请记住objA
是指向A的指针,因此类似垃圾的值实际上是一个有效的内存地址。
在调试时,我可以看到成员的值和返回的值 objA的功能?
现在,您可以在观察窗口中展开objA
,以查看其成员的值,在这种情况下为name
。请记住,在初始化objA之前,您可能会看到name
的值,但同样,这将是垃圾值。
我不知道KDevelop是否支持观看功能。但您可以在Visual C ++中执行此操作。要观察函数的返回值,可以将函数调用添加到Watch窗口,例如:
objA->getName()
注意在Watch窗口中观看功能时,如果该功能修改数据,可能会产生副作用并使您感到困惑。