2011-01-03 2 views
7

При отладке программы, использующей (C или C++), gdb отображает комплексные номера как _M_value = xxx + yyy*I (с типом complex double).GDB - Доступ к реальным и мнимым частям комплексного номера

При отладке мне нужно напечатать это число, умноженное на коэффициент.

Следующая не работы:

print a * 8.0 

Argument to arithmetic operation not a number or boolean я получаю.

Кроме того, я не могу получить доступ к реальным и мнимым частям , чтобы я мог написать макрос gdb для выполнения вышеуказанного. Мое текущее решение - написать функцию C для управления сложными значениями и массивами и вызвать эту функцию из gdb. Так или иначе, это просто не так.

+1

Используете ли Вы стандартный C++ сложный шаблон? если да, то is.real()/a.imaj() не работает? – neuro

+0

Работа @neuro: thanks - .real() и .imag(). – nimrodm

+0

добро пожаловать. Я поставил свой комментарий в ответ, чтобы помочь людям (чтобы получить репутацию? ^^) – neuro

ответ

3

Если вы используете стандартный комплексный шаблон C++, тогда должны работать сложные :: real() и complex :: imaj().

my2c

Примечание: Был комментарий ^^

+0

По-прежнему раздражает то, что gdb не допускает арифметики с использованием комплексных чисел (т. Е. Умножения на скалярные). Возможно, gdb 7 с поддержкой python поможет. – nimrodm

+0

@nimrod: да. Я всегда чувствую себя немного расстроенным при использовании gdb для изучения сложных объектов/структур шаблонов с помощью gdb ... надеюсь, что gdb 7 улучшит это ... – neuro

0

Вы можете вызвать функции библиотеки C creal() и cimag(), чтобы разбить номер.

+0

Не работает для меня. Печать 0 для реальных и мнимых частей. Но я использую C++, поэтому, если я использую метод .rea() и .imag() для объекта C++ (а не _m_value), я получаю желаемый результат. – nimrodm