LLDB-Eigen-Pretty-Printer icon indicating copy to clipboard operation
LLDB-Eigen-Pretty-Printer copied to clipboard

LLDB Eigen Pretty Printer

LLDB Eigen Pretty Printer

LLDB Eigen Pretty Printer for matrices, arrays and quaternions of the Eigen library.

Example

Dense Matrix

Real Matrix

Eigen::MatrixXd A(3,5);
A<< 1, 2, 3, 4, 5,
    2, 3, 4, 5, 6,
    3, 4, 6, 7, 8;

Corresponding output in LLDB

(lldb) p A
(Eigen::MatrixXd) $0 = rows: 3, cols: 5
[ 1.00000000e+00  2.00000000e+00  3.00000000e+00  4.00000000e+00  5.00000000e+00;
  2.00000000e+00  3.00000000e+00  4.00000000e+00  5.00000000e+00  6.00000000e+00;
  3.00000000e+00  4.00000000e+00  6.00000000e+00  7.00000000e+00  8.00000000e+00 ]

Complex Matrix

  Eigen::Matrix<std::complex<float>,3,3,Eigen::RowMajor> B = 10*Eigen::Matrix<std::complex<float>,3,3>::Random();

Corresponding out in LLDB

(lldb) p B
(Eigen::Matrix<std::complex<float>, 3, 3, 1, 3, 3>) $0 = rows: 3, cols: 3
[  8.98654e+00 - 8.60489e+00i  -8.27888e+00 + 5.19907e-01i   3.26454e+00 - 6.15572e+00i;
  -3.02214e+00 + 7.80465e+00i  -9.59954e+00 - 8.71657e+00i  -8.73808e+00 - 8.45965e-01i;
   9.41268e+00 - 5.23440e+00i   7.01840e+00 + 8.04416e+00i   7.95207e-01 - 4.66669e+00i ]

Array

  Eigen::Array22d C;
  C<< 1, 0,
      0, 2;

Corresponding output in LLDB

(lldb) p C
(Eigen::Array22d) $2 = rows: 2, cols: 2
[ 1.00000000e+00  0.00000000e+00;
  0.00000000e+00  2.00000000e+00 ]

Sparse Matrix

Real Matrix

  Eigen::SparseMatrix<double> sparseA(10,10);
  sparseA.insert(3,1) = 2.0;
  sparseA.insert(3,2) = 4.0;
  sparseA.insert(1,2) = 5.0;
  sparseA.insert(6,9) = -4.5;
  sparseA.insert(7,8) = 3.5;
  sparseA.insert(7,6) = -1.5;

Corresponding out in LLDB

(lldb) p sparseA
(Eigen::SparseMatrix<double, 0, int>) $0 = rows: 10, cols: 10, nonzeros: 6
{ [1, 2] =  5.00000000e+00, [3, 1] =  2.00000000e+00, [3, 2] =  4.00000000e+00, [6, 9] = -4.50000000e+00, [7, 6] = -1.50000000e+00, [7, 8] =  3.50000000e+00 }

Complex Matrix

  Eigen::SparseMatrix<std::complex<int> > sparseB(5,3);
  sparseB.insert(2,1) = std::complex<int>(3,-2);
  sparseB.insert(4,2) = std::complex<int>(2,-1);
  sparseB.insert(4,0) = std::complex<int>(0,-5);
  sparseB.insert(1,2) = std::complex<int>(1,-1);
(lldb) p sparseB
(Eigen::SparseMatrix<std::complex<int>, 0, int>) $1 = rows: 5, cols: 3, nonzeros: 4
{ [1, 2] = 1.00000e+00 - 1.00000e+00i, [2, 1] = 3.00000e+00 - 2.00000e+00i, [4, 0] = 0.00000e+00 - 5.00000e+00i, [4, 2] = 2.00000e+00 - 1.00000e+00i }

Quaternion

  Eigen::Quaternion<double> q(2,0,1,-3);
  q.normalize();
(lldb) p q
(Eigen::Quaternion<double, 0>) $0 = { [x] = 0.00000000e+00, [y] = 2.67261242e-01, [z] = -8.01783726e-01, [w] = 5.34522484e-01 }

Installation

bash -c "$(curl -fsSL https://raw.githubusercontent.com/fantaosha/LLDB-Eigen-Pretty-Printer/master/tools/install.sh)"

Manual Installation

INSTALL_PATH=~/.lldb-eigen-pretty-printer
git clone https://github.com/fantaosha/LLDB-Eigen-Pretty-Printer.git $INSTALL_PATH
echo 'command script import "'$INSTALL_PATH'/LLDB_Eigen_Pretty_Printer.py"' >> ~/.lldbinit

Uninstallation

rm -fr ~/.lldb-eigen-pretty-printer

Afterwards remove the command script import command in ~/.lldbinit.

Acknowledgement

The development of this LLDB Eigen Pretty Printer has referred to LLDB Eigen Data Formatter and GDB Eigen Data Printer.

License

Copyright © 2018 Taosha Fan

Distributed under the GNU GENERAL PUBLIC LICENSE.