Visual Studio无法显示一些监视的表达式

Jon*_*eld 14 c++ debugging expression visual-studio

在Visual Studio中,由于各种原因,在调试会话期间无法解析大多数对象和变量.这意味着我无法检查或观察对象或调用它们的函数,因此调试代码非常困难,因为我的大多数表达式都无法正常工作.将表达式添加到监视窗口时,我遇到的一些典型错误包括:

  • CXX0019:错误:输入错误
  • CXX0059:错误:左操作数是类而不是函数名
  • CXX0058:错误:找不到重载运算符

这些表达式通常涉及重载的运算符和/或模板类对象.

为什么会这样?你怎么解决它?

Seb*_*ian 9

您遇到的错误是由于调试器的限制,Daniel没有暗示的错误.

监视窗口无法调用重载的运算符.如果你有例如std::vector<int> vecSomething你不能vecSomething[0]进入观察窗口,因为std::vector<int>::operator[]是一个超载的运营商.因此,对于对象矢量,您无法vecObject[0].SomeMemberVariableOfObject在观察窗口中执行此操作.你可以写vecObject._Myfirst[0].SomeMemberVariableOfObject.在Visual Studio的STL实现中,_Myfirst是指向第一个元素的向量的成员.

如果将自己的变量和类型添加到监视窗口,请直接向数据成员添加监视.跟随指针链是没有问题的member.memberStruct.ptrToObj->memberOfObj.

编辑:

实际上,Visual Studio可以在Watch窗口中调用代码:http: //geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-ndash-the-watch-window.aspx

因此,为什么不能使用重载运算符有点神秘.