我正在编写代码,该代码使用Eigen矩阵库进行坐标转换,还使用PCL进行点云处理(也经常使用Eigen)。尽管我在文档中观察到有关Eigen类型对齐(https://eigen.tuxfamily.org/dox/group__DenseMatrixManipulation__Alignement.html)的所有内容,但我仍从Eigen收到有关未对齐访问的断言错误。
我只能在某些Eigen代码之前运行过时触发此断言,但未能准确指出确切的条件是什么。例如,这是崩溃的代码:
true
,但前提是之前已经执行过一些本征代码。可能是因为问题仅在private void rotateMe()
{
Vector3 axis;
if (x) axis = Vector3.right;
else if (y) axis = Vector3.up;
else if (z) axis = Vector3.forward;
if(Mathf.Approximately(axis.magnitude,0)) return;
transform.Rotate(axis,90,Space.World);
x = false;
y = false;
z = false;
}
进行了一些分配之后才会出现。
但是,帮助页面告诉我,我应该使用调试器来准确检查哪个对象未对齐:
例如,如果您使用的是GCC,则可以按以下方式使用GDB调试器:
Affine3f Transform::getaffine() const {
// ... Vector3f translation(...)
// ... Quaternionf rotation(...)
Affine3f affine = Affine3:f:Identity(); /// <---
affine.translate(translation);
affine.rotate(rotation);
return affine;
}
现在,您确切地知道了问题在您自己的代码中的何处发生,请继续阅读 了解您需要更改的内容。
我当然是这样做的,但是此处崩溃的代码似乎可以满足所有要求。
问题
当仅在以后的分配过程中触发错误时,如何有效调试导致未对齐的代码?