【问题标题】:Visual Studio 2008 debugging visualizing matrixVisual Studio 2008 调试可视化矩阵
【发布时间】:2012-09-18 14:38:50
【问题描述】:

我正在构建一个复杂的数学软件,我必须在调试一些创建的 500x700 矩阵时查看。矩阵也不是按顺序填充的,这意味着它们是“随机”填充的,我需要看到这一点。我读过内存屏幕,我可以看到内存位置和它们的值,但是对于如此巨大的矩阵,内存窗口对我来说没有用。

所以我的问题是,除了内存窗口之外,还有其他方法可以在 Visual Studio 08 中调试和观察矩阵吗?

【问题讨论】:

    标签: c++ debugging visual-studio-2008 matrix


    【解决方案1】:

    我用来可视化复杂数据结构的方法是在您的类中创建一个Dump() 方法,该方法将数据格式化为字符串并返回一个std::string。如果要检查变量,请在调试器中选择它并使用 Ctrl-Alt-Q 调用 QuickWatch 并键入 myVariable.Dump()。然后,这将向您显示压缩成一行的字符串。如果您然后单击放大镜图标,它将打开一个可以调整大小的文本可视化器窗口。

    如果您需要对格式进行更多控制,请让 Dump() 方法采用 int 来满足您所需的详细程度。

    编辑:

    好的,这是一个例子,使用stringstream 组装一个字符串:[免责声明:我没有尝试编译这个]

    class Matrix {
    public:
      int m_Data[ROWS][COLS];
    
      ...
      std::string Dump() const {
        std::ostringstream oss;
        for (int r=0;r<ROWS; r++) {
          for (int c=0;c<COLS; c++) {      
            oss << m_Data[r][c] << " ";
          }
          oss << "\n";
        }
        return oss.str();
      }
    
      void DumpToFile() {
        std::ofstream os("output.txt");
        os << Dump();
      }
    };
    

    Dump() 方法将输出到可以在 QuickWatch 窗口中显示的字符串。如果文本预览太小,那么您可以调用 DumpToFile() 代替它将矩阵写入可以在单独的文本编辑器中查看的文件。关键是 QuickWatch 将评估函数调用(在一定程度上),因此您可以使用它来调用这些辅助方法。

    【讨论】:

    • 抱歉,我对一般的 c++ 编程和 Visual Studio 中的更多内容非常陌生。我想我确实或多或少地理解了你的建议,但我不知道如何做到这一点。问一点例子会不会太过分了?非常感谢!
    • 感谢您的帮助!使用这种方法非常有趣,因为在调试时没有简单的方法可以随时随地读取矩阵。
    • 我过去用于矩阵的另一种技术是使用DumpToFile() 方法,然后在 Matlab/Octave/SciPy 中编写一个导入脚本以读取空格分隔的文件并显示以图形方式。这在您的情况下可能非常有用,因为您将能够看到哪些元素已被填充。
    • 谢谢,事实上我已经想到了这一点,因为我的 c++ 程序是一个 matlab 程序,我正在用 c++ 重写它,在 matlab 中将它与我已经拥有的正确结果进行比较会非常有用
    猜你喜欢
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多