VS2008 c++调试器似乎无法/不愿意查看函数中定义的结构的内部实例.人们是如何调试这些代码的?
VS2008 C++ debugger seems unable/unwilling to look inside instances of structs defined within a function. How are people debugging such code?
VS2008 c++调试器似乎无法/不愿意查看在函数中定义的结构的实例,当这些实例(或引用)在与定义嵌套结构的不同范围内声明时(例如for循环)。知道为什么会这样吗?
void MyClass::doSomething()
{
struct NestedStruct
{
int usefulMetaInfo
vector<double> data;
};
//WORKS - Debugger can see inside ns
NestedStruct ns;
ns.data.push_back(1);
//FAILS - Debugger cannot see inside ns
for{int i=0;i<1;i++}
{
NestedStruct ns;
ns.data.push_back(1);
}
}
这样的结构体具有内部链接,并且几乎可以肯定调试器在查看它时遇到麻烦,原因与将它们用作模板类型参数是非法的相同。
您唯一的解决方案可能是将结构体放入例如detail命名空间中,以便为其提供外部链接。
解决这个问题的方法很简单。
确保NestedStruct的所有句柄都声明在与NestedStruct定义相同的作用域中。请注意,这通常需要使用指针句柄而不是引用(例如,当您希望迭代NestedStruct容器时)。
void MyClass::doSomething()
{
struct NestedStruct
{
int usefulMetaInfo
vector<double> data;
};
NestedStruct ns*; //declare here
for{int i=0;i<1;i++}
{
//NestedStruct ns*; //DON'T declare here
ns = someContainer[i];
ns->data.push_back(1);
}
}
这将允许您将结构整齐地封装在它所属的位置(实现细节),同时仍然能够使用VS2008调试器检查它。你放弃了一点对范围的控制,但这是最好的。
为什么调试器有这个问题我不知道…
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 从C++实例化QML
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 从Excel VBA调用C++DLL只能从Visual Studio中的调试实例工作
- 调试"在抛出 ..) 实例后终止调用",当异常 _should_ 被捕获时
- 如何在C++中调试单个容器实例的大小
- 调试和发布配置 (c++) 中内置的共享库之间的用法有何区别?
- 调试 - 对象实例
- VS Studio调试器-获取(并观察)一个类型的所有实例
- VS2008 c++调试器似乎无法/不愿意查看函数中定义的结构的内部实例.人们是如何调试这些代码的?
- 调试模板实例化
- 调试与发布可执行文件有何不同?
- 当尝试使用类的实例调用方法时,调试断言错误