截断的字符串 Visual Studio 2022 立即窗口 C++

问题描述 投票:0回答:1

我正在用 C++ 开发一个 MATLAB MEX 文件 (DLL),并使用 Visual Studio 进行调试。我能够成功单步执行代码,但在显示某些变量(矩阵)的内容时遇到问题。

矩阵存储在连续的内存块中

float[N]
double[N]
,其中
N
是模板参数(
N
在编译时已知)。

我需要控制矩阵中数字格式的精度,并且我还希望以特定方式格式化元素(以便可以轻松地将它们输入回 MATLAB 中进行比较),因此我快速编写了一个

printMat 
函数将矩阵转换为字符串。然后,当我想检查矩阵的内容时,我在立即窗口中调用此函数。

我的问题: 立即窗口仅显示字符串的一部分,例如

"[ -1.0737417600000000e+08, -1.0737417600000000e+08, -1.0737417600000000e+08; -1.0737417600000000e+08, -1.0737417600000000e+08, -1.0737417600000000e+08; -1.0737417600000000e+08, -1.0737417600000000e+08...

这个字符串实际上应该是。

"[ -1.0737417600000000e+08, -1.0737417600000000e+08, -1.0737417600000000e+08; -1.0737417600000000e+08, -1.0737417600000000e+08, -1.0737417600000000e+08; -1.0737417600000000e+08, -1.0737417600000000e+08, -1.0737417600000000e+08]"

如果矩阵较小,我可以看到整个字符串,但这在我的情况下不是一个选项。

到目前为止我尝试过的:

  • 打印到
    std::cout
  • 打印到
    std::cerr

不幸的是,

cout
cerr
上没有显示任何内容,我猜测它们是由 MATLAB 进程控制的,并且在调试器“释放”进程之前不会打印任何内容。

我的问题:

有没有办法从立即窗口获取该字符串的纯净版本?我真的不想用打印语句或临时调试字符串乱扔我的代码,因为每次我想检查新变量的值时都需要重新构建。

更新:

我最终将字符串写入

printMat
函数中的文件中。然后我将文件保留在 Notepad++ 中打开。每次调用
printMat
Notepad++ 都会提示我更新文件内容。然后我可以将文本复制到 MATLAB 中进行比较。这有点麻烦,但易于管理。

c++ visual-studio matlab visual-studio-debugging immediate-window
1个回答
0
投票

您可以将问题转发到开发者社区并在此处发布链接。这是一个折衷方案:右侧有一个

view
按钮。单击它并选择文本可视化工具。然后就可以看到字符串了。

© www.soinside.com 2019 - 2024. All rights reserved.