GDB не может отобразить повышающую матрицу uBLAS?

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

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

Это можно обойти?

Спасибо!

3 ответа

Решение

Это потому, что 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

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

V.operator()(1,1)

в гдб

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

Другие вопросы по тегам