有如下程式邏輯結構,主程式中呼叫兩個動態庫,動態庫中,含有相同名字的全域性變數,在後載入庫的函式中,更改全域性變數值,使用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是乙個正整數,表示需要顯示的記憶體單元的個數,也就是說從當前位址向後顯示幾個 記憶體單元...