簡體   English   中英

如何使用GDB在給定函數的范圍內聲明變量?

[英]How to declare a variable in the scope of a given function with GDB?

我知道gdb允許使用set命令設置已聲明的變量。

是否有可能gdb在給定函數的范圍內動態聲明一個新變量?

您可以動態分配一些空間並使用它來存儲新變量。 根據“當前函數的范圍”的含義,它可能不是您想要的。

但是當你有一個帶有指向輸出參數的指針的函數func()時,它的外觀如下:

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

對於C(可能還有C ++)代碼,這將是非常困難的,因為在大多數實現中這樣做會涉及移動堆棧指針,這會使函數的退出代碼失敗,因為它不再匹配堆棧幀的大小。 此外,函數中訪問局部變量的所有代碼都會突然冒險到達錯誤的位置,這也很糟糕。

所以,我不這么認為,不。

這就是我用來打印變量的方式

(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
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM