Собственная отладка GDB с ошибкой условных точек останова - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь отладить с помощью GDB, используя условные точки останова на объекте Eigen. Например, я хотел бы разбить, когда любые значения в моем векторе отличны от нуля. Я бы сделал это в 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?

1 Ответ

0 голосов
/ 31 мая 2019

Согласно этот вопрос , (иногда) GDB, кажется, имеет проблемы с перегруженными операторами. Вы можете попробовать один из следующих вариантов:

if (! v.isZero())

if (! v.cwiseEqual(0).all()) 

И вместо if v[0] != 0 вы можете попробовать один из них:

 if (v.data()[0] != 0)

 if (v.coeff(0) != 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...