Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Pretty printer w gdb, ale zupełnie inaczej.

2 views
Skip to first unread message

heby

unread,
Sep 27, 2023, 3:31:03 PM9/27/23
to
Cześć.

Jest program w C/C++. Aplikacja zawiera dokładnie 1 zmienną globalną,
tak ważną, że chciałbym jej stan (w dodatku wymagający obliczeń
matematycznych) obserwować w każdym kontekście debugu, bez względu na
ramkę stosu.

Tak wiem, mogę ja wsadzić do watcha, ale zagadnienie jest nieco bardziej
skomplikowane, w niektórych kontekstach wymaga ona innego policzenia i
czasasami "unieważnia się" a wtedy wyniki mogą być mylące. Wolałbym ją
obserwować w locals i "zniknąć" w niektórych sytuacjach.

Pytanie 1:

Czy pythonowy interfejs do pretty printerów pozwala:
1) dodać "obcą" zmienną do listy widzianych w danej ramce
albo
2) podmienić/owrapować oryginalny obiekt "ramka stosu" tak, aby zwarcał
moją listę zmiennych?

Pytanie 2:

Jako bonus mam też inny problem: w fizycznej metodzie "children()"
pretty printera chciałbym, poza normalnie obsługiwanymi polami klasy,
wyświetlić też wirtualne pole "[raw]" w którym znajdzie się struktura
obiektu bez modyfikacji. Co wymaga wyiterowania pól.

Na razie robocza hipoteza jest taka, że się nie da, bo nie da się
wyiterować pól przychodzących jako "value" do obiektu pretty printera,
mimo że ma stosowany interfejs do iteracji. Wygląda na jakieś odwalanie
dziadostwa po stronie gdb, brakuje implementacji metod mimo ich dostepności.

Ktoś ma jakieś podpowiedzi lub linki do pretty printerów posiadających
takie zaawansowane opcje, jak manipulacje ilością zmiennych i iteracje
przez pola obiektów?

Jestem ogólnie zawiedziony tym interfejsem, wygląda jak następny OO
zaprojektowany przez programatora C, czyli kompletnie bez pojęcia :/
0 new messages