【问题标题】:Visual Studio Debugger Watch problemsVisual Studio 调试器监视问题
【发布时间】:2012-11-16 16:34:52
【问题描述】:

如何在 Visual Studio 调试器监视窗口(或其他地方?)中找到堆栈上变量的地址?

读取变量可以正常工作:

streets     streets [11790](0x1c66a690 [...] std::vector<Street *,std::allocator<Street *> >

但是以 & 为前缀并没有给我地址:

&streets        streets [11790](0x1c66a690 [...] std::vector<Street *,std::allocator<Street *> >

另外,尝试读取大小不起作用,这是为什么呢?

streets.size()  CXX0075: Error: Cannot set up Function Evaluation   

程序在调试模式下编译。

【问题讨论】:

  • &streets 应该给你指向你的变量的指针,我怀疑监视窗口可以执行像 vector::size() 这样的函数。
  • @marcin_j:实际上可以。 VS 监视窗口相当强大。
  • @JohnDibling 很好,我得用我的 VS2005 检查一下

标签: c++ native visual-studio-debugging


【解决方案1】:

Visual Studio 调试器通过名为 autoexp.dat 的文件中的架构定义的翻译驱动调试器监视、快速监视、自动和局部变量视图(取决于您的 VS 版本,内容其中可能会发生显着变化)。该文件位于您的 VS-InstallDir/Common7/Packages/Debugger 文件夹中(至少它适用于 VS2010 和 VS2012)。

了解这一点后,您可以尝试/考虑一些想法:

方法一:图书馆知识

要访问向量中第一个元素的实际 地址,我最终只需要这样做:

streets._Myfirst

如果您知道要查看的元素数量,可以通过以下方式使用数组扩展扩展:

streets._Myfirst,N

其中N 是元素的数量

注意:这仅适用于如上所示的向量。具体做法因您使用的容器而异。毫无疑问,有一些更简单的方法可能不太依赖于 std::vector 的实现,但这是我知道如何让您快速启动和调试的最简单方法。


方法二:焦土

在工具/选项/调试/常规下是您可以打开和关闭的功能列表。您会发现其中一个对这个问题特别有用:

在可变窗口中显示对象的原始结构。

打开此ON 可查看所有结构和容器的原始成员变量,包括标准容器,如 std::vector。这有效地禁用了 autoexp.dat

中模板的使用

【讨论】:

  • 方法一效果很好,谢谢。当然,然后可以通过输入streets._Mylast - streets._Myfirst 来检索矢量大小。不知道为什么vector::size() 不起作用,但谁需要它。
【解决方案2】:

要查看地址,请转换为 void *,如下所示:(void *)&amp;streets

这是 Visual Studio 试图通过直接向您显示指向的向量来提供帮助的尝试。类似的问题会影响向量数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多