当本征对齐错误似乎与触发它们的确切代码无关时,我该如何调试

我正在编写代码,该代码使用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;
}

现在,您确切地知道了问题在您自己的代码中的何处发生,请继续阅读 了解您需要更改的内容。

我当然是这样做的,但是此处崩溃的代码似乎可以满足所有要求。

问题

当仅在以后的分配过程中触发错误时,如何有效调试导致未对齐的代码?

ipqydp 回答:当本征对齐错误似乎与触发它们的确切代码无关时,我该如何调试

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2779746.html

大家都在问