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