Come dichiarare una variabile nell’ambito di una determinata funzione con GDB?

So che gdb consente di impostare una variabile già dichiarata usando il comando set .

È ansible che gdb dichiari dynamicmente una nuova variabile nell’ambito di una determinata funzione?

Per il codice C (e probabilmente C ++), sarebbe molto difficile, poiché farlo nella maggior parte delle implementazioni implicherebbe lo spostamento del puntatore dello stack, il che renderebbe imansible il codice di uscita della funzione a causa del fatto che non corrispondesse più alle dimensioni dello stack frame. Inoltre, tutto il codice nella funzione che accede alle variabili locali rischierebbe di colpire improvvisamente la posizione sbagliata, che è anche male.

Quindi, io non la penso così, no.

È ansible allocare dynamicmente un po ‘di spazio e utilizzarlo per memorizzare una nuova variabile. A seconda di cosa intendi per “ambito della funzione corrente” potrebbe non essere quello che vuoi.

Ma ecco come appare, quando si ha function func () che accetta un puntatore a un parametro di output:

 set $foo = alloc(sizeof(struct funcOutStruct)) func($foo) p *$foo free($foo) 

è così che usavo stampare le variabili

 (gdb) set $path=((ngx_path_t **)ngx_cycle->paths.elts)[2] (gdb) print *$path $16 = { name = { len = 29, data = 0x80ed15c "/usr/local/nginx/fastcgi_temp" }, len = 5, level = {1, 2, 0}, manager = 0, loader = 0, data = 0x0, conf_file = 0x0, line = 0 }