gpt4 book ai didi

.net - 调试时我看不到堆上的字符串

转载 作者:行者123 更新时间:2023-12-04 15:09:04 25 4
gpt4 key购买 nike

我正在尝试在使用非常大的字符串的 .NET 应用程序中调试内存问题。为此,我想设置一些断点并在执行的各个阶段分析堆。

问题是:在使用Visual Studio 2015的诊断工具时,好像只有在没有调试的情况下启动应用程序时才会显示堆上的大字符串。这很不方便,因为它阻止我设置断点。

问题 : 这是一个已知的错误吗?还是我错误地使用了诊断工具?

如何复制

  • 使用以下代码创建一个新的 C# 控制台应用程序 (.NET 4.6.1):
    using System;
    using System.Threading;

    class Program
    {
    static void Main(string[] args)
    {
    string test1 = new string('a', 100000000);
    Thread.Sleep(2000);
    string test2 = new string('a', 100000000);
    Thread.Sleep(2000);
    string test3 = new string('a', 100000000);

    Console.WriteLine("Done");
    Console.ReadLine();
    }
    }
  • 激活诊断工具 (Ctrl+Alt+F2) 并通过调试 (F5) 启动应用程序。观察内存使用情况,注意到每个字符串分配增加了 200MB 的内存使用量。在内存使用量达到最大值后,拍摄内存快照并查看堆。
  • 观察到在堆上占用最多内存的对象类型是一些 10 KB 的图标。显然,这是不正确的。

  • with debugging
  • 停止应用程序。使用诊断工具重新启动,但不进行调试 (Alt+F2)。选择“内存使用”并开始。
  • 再次注意内存的增加,拍摄快照并查看它。
  • 观察显示的三个大字符串(应该是)。

  • enter image description here

    最佳答案

    我找到了一种即使在调试时也能看到字符串的方法。出于某种奇怪的原因,默认选项“仅我的代码”在调试时隐藏了这些字符串:

    just my code

    删除复选标记使字符串可见。

    显然,这只是调试时的问题。正如问题中的第二个屏幕截图所示,在“未调试”的情况下,即使打开了“仅我的代码”,也会显示字符串。

    关于.net - 调试时我看不到堆上的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37948373/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com