调试 - 对象实例

时间:2013-09-22 08:36:50

标签: c++ debugging

到目前为止,我使用调试的唯一方法是知道异常发生在哪一行以及成员的值。我不知道如何看待这样的物体:

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)

1 个答案:

答案 0 :(得分:0)

您最初在objA中看到垃圾值,因为它尚未初始化。在此行上 后,它将更改为有效值。

A* objA = new A();

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

  

在调试时,我可以看到成员的值和返回的值   objA的功能?

现在,您可以在观察窗口中展开objA,以查看其成员的值,在这种情况下为name。请记住,在初始化objA之前,您可能会看到name的值,但同样,这将是垃圾值。

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

objA->getName()

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