【问题标题】:Visual Studio debug maximum buffer sizeVisual Studio 调试最大缓冲区大小
【发布时间】:2016-02-20 02:25:15
【问题描述】:

在 Visual Studio (2010) 中调试我的项目时,一旦我进入其中一个文件,就会收到消息“没有可用的源代码”。该文件现在只是一个具有一个功能的测试文件:

void foo()
{
    float testbuf[200000] = {0};
}

如果我分配一个较小的缓冲区,调试器会正常进入文件。 在我的调试视图中,我的“调用堆栈位置”是空的,并且“没有可用的反汇编”。

在我看来,Visual Studio 调试器可以处理的数据量已经达到了最大值。

谁能告诉我这是否是问题以及如何解决它。也许一些 Visual Studio 设置可以帮助我?

【问题讨论】:

  • 首先,你为什么要用快6岁的VS2010? DEFINE_1024DEFINE_6 是什么?您是否在调试模式下运行(禁用优化,启用调试信息)?你能生成一个MCVE吗?
  • 你必须给出上下文,甚至不清楚你是否用这些数组搞砸了堆栈,或者机器只是因为你在 float[] 声明中使用 sizeof(double) 而生气.轰炸时的调用堆栈也很重要。
  • 我不知道问题是什么,但是有一个float 的数组,其大小是由double 中的字节数计算的,这似乎很奇怪。 (当然,如果大小是由 float 中的字节数计算的,那同样奇怪。)
  • 我将代码示例简化到最低限度,所以我希望它现在是 MCVE。我也认为这几乎不可能是代码/语法问题。
  • 这是一个发布版本,其中该方法已被优化掉,因为它没有做任何事情?

标签: visual-studio visual-studio-2010 debugging stack visual-studio-debugging


【解决方案1】:

我找到了避免该问题的方法。 如果我只是通过 malloc-ing 相同的大缓冲区“动态”创建缓冲区,那么 Visual Studio 调试我的源文件没有问题。 代码示例:

void foo()
{
    float *testbuf;
    testbuf = (float*) malloc(200000*sizeof(float)); // "dynamic" malloc
    memset(testbuf, 0, 200000*sizeof(float)); // Make sure buffer is empty.
    // Code (irrelevant to example)
    free(testbuf);
}

因此,这并不能回答 Visual Studio 调试器的堆栈内存的最大容量是多少的问题,但它确实提供了解决该问题的方法。

我希望这会对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多