2011-01-03 8 views
7

Podczas debugowania programu używającego (C lub C++), gdb wyświetla liczby zespolone jako _M_value = xxx + yyy*I (z typem complex double).GDB - Uzyskiwanie dostępu do rzeczywistych i urojonych części złożonego numeru

Podczas debugowania muszę wydrukować ten numer pomnożony przez współczynnik.

Poniższy nie pracy:

print a * 8.0 

dostaję Argument to arithmetic operation not a number or boolean.

Ponadto nie mogę uzyskać dostępu do części rzeczywistych i urojonych , dzięki czemu mogę napisać makro gdb, aby wykonać powyższe czynności. Moje obecne rozwiązanie polega na napisaniu funkcji C do manipulowania złożonymi wartościami i tablicami oraz wywoływania tej funkcji z gdb. Jakoś to po prostu nie brzmi dobrze.

+1

Używasz standardowej C++ kompleks szablonu? jeśli tak, czy a.real()/a.imaj() nie działa? – neuro

+0

@neuro: dziękuję - działają metody .real() i .imag(). – nimrodm

+0

nie ma za co. Ustawiłem swój komentarz w odpowiedzi, by pomóc ludziom (czy zdobyła ona reputację? ^^) – neuro

Odpowiedz

3

Jeśli korzystasz ze standardowego szablonu C++, to powinieneś zastosować complex :: real() i complex :: imaj().

my2c

Uwaga: Czy komentarz ^^

+0

Nadal irytujące, że gdb nie pozwala na arytmetyczne używanie liczb zespolonych (tj. Pomnożenie przez skalar). Być może pomoże gdb 7 z obsługą Pythona. – nimrodm

+0

@nimrod: tak. Zawsze czuję się trochę sfrustrowany, gdy używam gdb do eksploracji złożonych struktur obiektów/szablonów za pomocą gdb ... mam nadzieję, że gdb 7 ulepszy to ... – neuro

0

Możesz wywołać funkcje biblioteki C creal() i cimag(), aby podzielić liczbę.

+0

Nie działa dla mnie. Drukuje 0 dla rzeczywistych i urojonych części. Ale używam C++, więc jeśli użyję metody .rea() i .imag() w obiekcie C++ (a nie w wartości _m_) otrzymam pożądany wynik. – nimrodm

Powiązane problemy