我正在用 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 中进行比较。这有点麻烦,但易于管理。