2011-01-03 14 views
7

Al depurar un programa que utiliza (C o C++), gdb muestra números complejos como _M_value = xxx + yyy*I (con un tipo de complex double).GDB - Acceso a partes reales e imaginarias de un número complejo

Al depurar, necesito imprimir ese número multiplicado por un factor.

La siguiente no lo hace trabajo:

print a * 8.0 

me sale Argument to arithmetic operation not a number or boolean.

Además, no puedo acceder a las partes reales e imaginarias para que pueda escribir una macro gdb para hacer lo anterior. Mi solución actual es escribir una función C para manipular matrices y valores complejos, y llamar a esa función desde gdb. De alguna manera, esto simplemente no se siente bien.

+1

Cómo se utiliza el estándar de C++ plantilla compleja? si es así, ¿no funciona a.real()/a.imaj()? – neuro

+0

@neuro: gracias - los métodos .real() y .imag() funcionan. – nimrodm

+0

de nada. He puesto mi comentario en una respuesta para ayudar a la gente (¿fue para ganar reputación? ^^) – neuro

Respuesta

3

Si utiliza la plantilla compleja C++ estándar, entonces complex :: real() y complex :: imaj() deberían funcionar.

MY2C

Nota: ¿Era un comentario ^^

+0

Sigue siendo molesto que gdb no permita la aritmética usando números complejos (es decir, multiplicando por escalar). Quizás gdb 7 con soporte de Python ayudará. – nimrodm

+0

@nimrod: sí. Siempre me siento un poco frustrado cuando uso gdb para explorar estructuras complejas de objeto/plantilla con gdb ... espero que gdb 7 mejore eso ... – neuro

0

Puede llamar a las funciones de la biblioteca C creal() y cimag() para desglosar el número.

+0

No funciona para mí. Imprime 0 para partes reales e imaginarias. Pero estoy usando C++, así que si uso el método .rea() y .imag() en el objeto C++ (no en el _m_valor) obtengo el resultado deseado. – nimrodm

Cuestiones relacionadas