GDB列印同名全域性變數名不準確

2021-10-03 18:18:10 字數 902 閱讀 6885

有如下程式邏輯結構,主程式中呼叫兩個動態庫,動態庫中,含有相同名字的全域性變數,在後載入庫的函式中,更改全域性變數值,使用gdb檢視時,值未更改。

主程式**如下:

#include #ifdef _win32

#include #else

#include #include #endif//_win32

typedef void (*dll_func)(void);

int main(void)

動態庫libdll1.so的**如下:

dll1.cpp:

#include #ifdef _win32

#define export_api __declspec(dllexport)

#else

#define export_api

#endif//

#ifdef __cplusplus

extern "c"

#ifdef __cplusplus

};#endif

refer.cpp:

#include #ifdef __cplusplus

extern "c"

void diff(void)

#ifdef __cplusplus

};#endif

執行上面的程式,使用gdb除錯,如下圖:

可以看到在呼叫libdll2.so中的函式refer2更改dllint時,顯示值未更改。但是通過printf顯示是正確的。未找到解決方法,據說有命令可能檢視到不同範圍的全域性變數,但是一直未找到。

gdb列印記憶體位元組

x 16bx address 單位元組16進製制列印address位址處的長度為16的空間的記憶體,16表示空間長度,不是16進製制,x表示16進製制,b表示byte單位元組 詳解 x n f u是可選的引數。n是乙個正整數,表示需要顯示的記憶體單元的個數,也就是說從當前位址向後顯示幾個 記憶體單元...

gdb列印記憶體位元組

x 16bx address 單位元組16進製制列印address位址處的長度為16的空間的記憶體,16表示空間長度,不是16進製制,x表示16進製制,b表示byte單位元組 詳解 x n f u是可選的引數。n是乙個正整數,表示需要顯示的記憶體單元的個數,也就是說從當前位址向後顯示幾個 記憶體單元...

gdb列印記憶體位元組

x 16bx address 單位元組16進製制列印address位址處的長度為16的空間的記憶體,16表示空間長度,不是16進製制,x表示16進製制,b表示byte單位元組 詳解 x n f u是可選的引數。n是乙個正整數,表示需要顯示的記憶體單元的個數,也就是說從當前位址向後顯示幾個 記憶體單元...