2013-07-30 6 views
5

Chciałbym zadeklarować zmienną tablicową wygody, takie jakCzy można zadeklarować zmienną wygody GDB jako tablicę?

set $list[10] 

ale pojawia się błąd składni.

Czy można utworzyć wektor przy użyciu zmiennych wygodnych?

Mogę użyć wskaźników, jeśli uda mi się znaleźć bezwzględną pamięć obszaru, której GDB może użyć, której program docelowy nie będzie używał.

Oh, BTW, nie mam tabeli symboli dla docelowego programu, który debuguję, używając kompilatora niezgodnego z GDB.

Wersja docelowa GDB I nie obsługuje pythona.

Odpowiedz

2

Myślę, że jest to możliwe tylko przy przydzielaniu pamięci w gorszym miejscu. Oznacza to, spróbuj coś takiego:

set $list = (int *) malloc (10 * sizeof (int)) 

Zmień typy, aby dopasować.

Inną podobną opcją jest użycie funkcji {...}. Nie jestem pewien, czy nie, ale myślę, że może to w niektórych przypadkach przydzielić pamięć w gorszym miejscu. W każdym razie, spróbuj:

print {1,2,3,4}[2] 

uzyskać

$1 = 3 
+0

Postaram się {...} funkcję. Nie mogę użyć malloc(), ponieważ nie mam tabeli symboli, więc gdb nie wie, gdzie jest malloc(). Mógłbym stworzyć zmienną wygody, $ Malloc z adresem malloc z mapy. To może zadziałać. – KeithSmith

+0

Jeśli masz jakikolwiek użyteczny adres, możesz użyć rzutowania {TYPE}, aby traktować go jak coś innego. Na przykład: set $ var = {int [4]} & main. Lub coś w tym stylu, patrz podręcznik - Mam problem z zapamiętywaniem dokładnej składni tego rozszerzenia. –

+0

@TomTromey Nie sądzę, że jest to możliwe tylko poprzez ręczne przydzielanie pamięci inferriorowi. Look: kod 'set $ test =" Hello "', 'p perror ($ test)' działa poprawnie. Możesz nawet wziąć adres. –