c++ - 当特征对齐错误似乎与触发它们的确切代码无关时,如何调试它们
问题描述
我正在编写代码,它使用 Eigen 矩阵库进行坐标变换,还使用 PCL 进行点云处理(它也大量使用 Eigen)。尽管我已经观察了文档中关于 Eigen 类型对齐的所有内容(https://eigen.tuxfamily.org/dox/group__DenseMatrixManipulation__Alignement.html),但我不断从 Eigen 收到关于未对齐访问的断言错误。
我只能在之前运行一些 Eigen 代码时触发此断言,但未能成功确定确切的条件是什么。例如,这是崩溃的代码:
Affine3f Transform::getAffine() const {
// ... Vector3f translation(...)
// ... Quaternionf rotation(...)
Affine3f affine = Affine3:f:Identity(); /// <---
affine.translate(translation);
affine.rotate(rotation);
return affine;
}
但前提是之前已经执行了一些特征代码。也许那是因为只有在Eigen::aligned_allocator
.
但是,帮助页面告诉我应该使用调试器来准确检查哪个对象未对齐:
例如,如果您使用的是 GCC,则可以按如下方式使用 GDB 调试器:
$ gdb ./my_program # Start GDB on your program
> run # Start running your program
... # Now reproduce the crash!
> bt # Obtain the backtrace
现在您已经准确地知道问题在您自己的代码中发生的位置,请继续阅读以了解您需要更改的内容。
我当然是这样做的,但是这里崩溃的代码似乎满足了所有要求。
问题
当错误仅在以后的分配期间触发时,如何有效地调试导致错位的代码?
解决方案
推荐阅读
- javascript - 如何检测一个按钮是否在jquery中被折叠?
- javascript - UUID 的替代品
- weblogic - 如何在不关闭服务器的情况下清除 WebLogic Server 控制台上的日志?
- javascript - 无法在 Vue 模板中显示 JSON 响应数据
- python - 使用 scikit-image 将 png 转换为 jpeg
- mysql - mysql使用变量来决定是否执行插入
- class - 为什么我收到错误消息:“Credis_Client::scan() 的参数 1 应为参考”?
- flutter-listview - Listview Builder On Scroll child == null 或 hasSize == null 等
- javascript - 从 Node child_process 执行 Argo Tunnel 时出现错误 1016
- html - 在IOS上悬停后如何返回原始位置