我正在尝试使用Eigen对象上的条件断点来调试GDB。例如,当向量中的任何值都非零时,我想要中断。我会在GDB中这样做:
break cpp/File.cpp:143 if (v != 0).any()
然而,这不起作用。GDB提供了以下功能:
Could not find operator!=
即使这是完全有效的语法。此外,像这样的条件断点
break cpp/File.cpp:143 if v[0] != 0
在GDB中显示以下错误:
Error in testing breakpoint condition:
Couldn't get registers: No such process.
An error occurred while in a function called from GDB.
Evaluation of the expression containing the function
(Eigen::DenseCoeffsBase<Eigen::Array<int, 3, 1, 0, 3, 1>, 1>::operator[](long)) will be abandoned.
When the function is done executing, GDB will silently stop.
代码是用-O0 -g -fno-inline
编译的。如何调试Eigen对象的内容?
发布于 2019-05-31 19:37:18
根据this question的说法,(有时) GDB似乎在重载操作符方面存在问题。您可以尝试以下方法之一:
if (! v.isZero())
if (! v.cwiseEqual(0).all())
而不是if v[0] != 0
,你可以尝试其中的一个:
if (v.data()[0] != 0)
if (v.coeff(0) != 0)
https://stackoverflow.com/questions/56364205
复制相似问题