我有一個共享庫(hlapi.so)在Linux系統上運行。這hlapi.so有很多模塊(我的意思是.c文件)。其中一個被命名爲hlapi.c定義這樣的兩個全球DATAS:GDB能否從xx.so解析全局數據而不執行?
static int hlapiInitialized = FALSE;
static struct hlapi_data app_sp;
當然也有這個hlapi.c模塊在其他許多代碼。 hlapi.so發佈給基於我們的hlapi.so構建自己的應用程序(名爲appbasehlapi)的客戶。
現在我得到了一個核心轉儲,其客戶解析的回溯顯示核心位於我們的代碼中。但客戶只能向我們提供核心轉儲文件。 appbasehlapi可執行文件不會與我們共享。所以在我的手中,我只有核心轉儲文件+ hlapi.so。
爲了調試這個核心,由我指揮
gdb --core=mycoredumpfile
裝入核心轉儲文件,然後在gdb,我用
set solib-search-path .
指定包含hlapi.so這樣的文件夾gdb可以從hlapi.so加載符號。然後我使用:
print hlapiInitialized
print app_sp
解析模塊中的全局數據。但是輸出值非常不正常。
我在這裏的問題是,如果我可以解析全局數據通過gdb中定義的hlapi.so沒有可執行文件?如果我通過gdb獲得的輸出是可信的? 我很欣賞任何評論。
順便說一句,hlapi.so是用gcc選項「-g -fPIC」構建的。
是否知道核心轉儲是否由您正在用於調試的庫的_exact_相同版本生成? – duskwuff
@duskwuff,是的。它與我們發佈給客戶的hlapi.so版本相同。 –