GDB не может отобразить повышающую матрицу uBLAS? - PullRequest
4 голосов
/ 26 февраля 2012

У меня есть успешно скомпилированная программа, использующая Boost-реализацию uBLAS-матриц.Увы, отладка с помощью gdb оказывается проблематичной, так как я не мог найти способ увидеть содержимое моих матриц во время отладки.Когда я пытаюсь увидеть элемент матрицы V (который существует и полон данных), я получаю:

(gdb) print V(1,1)
Invalid data type for function to be called.

Есть ли способ обойти это?

Спасибо!

Ответы [ 3 ]

12 голосов
/ 22 февраля 2015

Можно звонить

V.operator()(1,1)

в ГБД

4 голосов
/ 26 февраля 2012

Это потому, что GDB не поддерживает вызов перегруженного operator(). Он пытается просто вызвать V как функцию, и это не функция. Вы можете написать отдельную функцию, в которую вы передаете матрицу и вызываете оператора:

int get_element(matrix const &m,int i,int j) {
    return m(i,j);
}

(gdb) p get_element(V,1,1)
(int) $0 = 43.1

и GDB должен быть в состоянии назвать это

Вы также можете попытаться вручную проверить представление V, чтобы вручную извлечь нужное значение. Это, вероятно, будет сложно с типами, которые используют много шаблонов или метапрограммирование.

Если вы работаете на платформе, которая поддерживается LLDB, она поддерживает перегрузки вызывающего оператора.

struct foo {
    int operator()(int i,int j) {
        return 10;
    }
};

(lldb) p f(1,1)
(int) $0 = 10
0 голосов
/ 25 ноября 2013

Я нашел эту тему, когда искал решение этой проблемы. Предлагаемое решение отлично работает. Однако вы также можете использовать метод матриц убласа at_element.

...