0

到目前为止,我使用调试的只是知道在哪一行发生了异常以及成员的值。我不明白观察这样的物体有什么用:

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)

4

1 回答 1

0

您最初会在其中看到垃圾值,objA因为它尚未初始化。一旦你跨过这条线,它就会变成一个有效值。

A* objA = new A();

新的有效值对您来说可能也是垃圾,但请记住,它objA是指向 A 的指针,因此类似垃圾的值实际上是有效的内存地址。

调试时能看到objA的成员值和函数返回值吗?

您现在可以objA在 Watch 窗口中展开,以查看其成员的值,name在本例中就是如此。请记住,您可能能够name在初始化 objA 之前看到 的值,但同样,这将是一个垃圾值。

不知道KDevelop是否支持看功能。但是您可以在 Visual C++ 中执行此操作。要查看函数的返回值,请将函数调用添加到 Watch 窗口,例如:

objA->getName()

在 Watch 窗口中观看函数时要注意,如果函数修改数据,可能会产生副作用并让您感到困惑。

于 2013-09-22T09:11:17.300 回答