【问题标题】:C++ 64bit, variable not foundC++ 64位,未找到变量
【发布时间】:2012-03-29 19:02:29
【问题描述】:

我的 C++ 应用程序有问题。它是在 32 位电脑上开发的,在 Microsoft Visual Studio 2008 上,现在我正在尝试在 64 位电脑上运行它。

在我的 32 位电脑上运行良好;在 64 位 pc 上,Visual Studio 没有给出任何编译问题,但是在执行时给出了错误的结果。 我不明白为什么。

在代码中,我定义了一个名为“dag”的变量,它是直接无环图的结构。通过调试软件发现,虽然我声明了,但是后来软件无法往里面插入数据,调试器说:

CXX0017: Error: symbol "dags" not found

这是我的代码:

    Dag<int64_t>* dags = new Dag<int64_t>();
    dags = getDagsFromRequest2(request, dags);

非常奇怪的是,如果我按照getDagsFromRequest2()函数内部的流程,我可以清楚地看到dags变量充满了数据:在“quickwatch”中,它显示了2342个节点。但是当我从 getDagsFromRequest2() 函数返回到这部分代码时,调试器说“CXX0017:错误:找不到符号“dags””。怎么可能?

您还可以从我的 Visual Studio 调试集中看到此屏幕截图。

可能是什么问题?

非常感谢

【问题讨论】:

  • 我认为这只是调试的问题(可能是发布版本的原因),它不会影响应用程序的行为。
  • 那里可能存在内存泄漏。首先为指针分配内存,然后覆盖指针以指向其他内存。
  • @DavideChicco.it 不,它应该在调试中。但我认为构建模式应该只有两个选项 - 发布和调试(我从未见过 Debug-x64 的选项)。同样,这是您的代码编译时的调试器问题

标签: c++ visual-studio debugging 64-bit 32bit-64bit


【解决方案1】:

有几种可能性需要考虑:

  1. 在发布版本中运行。切换到调试版本。
  2. 使用启用优化和/或禁用调试信息的调试版本。禁用优化并启用调试信息(在另一个项目中查找相关设置)。
  3. 某种损坏的构建。清理并重建整个解决方案。
  4. 内存损坏导致调试器无法显示变量。确保使用 Valgrind 等工具不存在内存问题。
  5. 一个 VS 错误。例如,VS2010 的This report 似乎暗示了一个具有相似特征的已知错误。确保安装了 VS2008 的所有补丁和修补程序。

【讨论】:

  • 感谢 Uesp。 1:刚试过,不行。 2:怎么样? 3:我已经清理和重建了,但它不起作用。 4:Valgrind 如何帮助我? 5:实际上,它可能是……
  • 我会把钱花在这是一个错误上,有几次我遇到过这个问题(在 C++ 和 C# 中)
  • 如果您进入 Project-Properties,请仔细检查 C/C++ 下的 Debug64 构建中的所有优化是否至少关闭 (/Od)。如果是由于内存损坏,那么 Valgrind 可能能够检测到它。另一种选择是将调试输出记录到控制台或文件并使用一些 printf() (或类似的)语句。如果这工作正常,那么问题几乎肯定是 VS。
  • @uesp 谢谢 uesp。我查过了,很有可能是 Microsoft Visual Studio 2008 的错误。
【解决方案2】:

变量 dags 在您的代码编译时定义。您看到的错误仅与调试器有关。我猜这是由于在发布模式下运行应用程序引起的,这有时会导致混乱和错误的手表值。尝试将模式更改为调试(有一个下拉菜单,您可以从中选择构建模式)。

编辑:正如您所说您在调试模式下运行,我的下一个猜测是这种行为可能是由堆栈损坏引起的。尝试使用valgrind 来检测是否是这种情况。开始它可能需要一段时间,但它是值得的,并且会检测您是否有一些内存损坏。

【讨论】:

  • Thanx Izomorphius,但我处于 Debug-x64 模式。
  • 我添加了另一个关于您的问题的想法。如果没有更多上下文,恐怕我无法提供更多选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 2019-05-25
  • 1970-01-01
  • 2019-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多