main.c
#include int main()
gcc main.c -o main
生成可執行檔案./main
然後gdb一下,如下:
因為,gcc預設是-o2選項,不含除錯資訊的,所以可以看到no debugging symbols found,沒有可除錯的符號表載入進來。檔案(main.c)也找不到,各個變數(a,b,c)也列印不了,都被優化掉了。
那麼我們用gcc -g -o0 main.c -o main再試一下。
gcc編譯時加了-g選項後,gdb就可以讀到除錯用的符號表了,並且檔案(main.c)也可以找到,變數(a,b,c)也都可以列印出來。
現在我們在上一步驟的基礎上,把main.c檔案刪除,然後gdb一下。
gdb就可以讀到除錯用的符號表了,但是檔案(main.c)找不到,即沒辦法在gdb裡看到源**了,但是變數(a,b,c)還是可以列印出來。
看了前面的三個例子,我們現在來說說debuginfo包。
一般在linux上,編寫乙個軟體後,都會用rpmbuild工具打包成rpm包,然後發給別人去部署。
rpm包裡一般就是有一些可執行檔案,靜態庫或者動態庫,但是不包含源**。
那麼有時候為了除錯方便,還會同時生成相應的rpm debuginfo包,這樣就可以方便除錯。只要客戶安裝了普通rpm包和相應版本的debuginfo包,就可以gdb除錯了,如果上面說的case3,雖然看不到源**,但是可以列印相應的變數。
在相應的*.spec末尾加上
%debug_package
即可。 this 閉包 作 域
this 閉包 作 域 專業術語 執行上下文 當函式執行時,會建立乙個稱為執行上下文 execution context 的環境,分為建立和執行兩個階段 建立階段 建立階段,指函式呼叫但未執行任何 時,此時建立了乙個擁有三個屬性的物件 executioncontext 建立作用域鏈 scope ch...
深度剖析變數作 域與閉包
變數分為區域性變數和全域性變數 區域性變數 只在定義的函式內部使 全域性變數 可以在整個script作 域內都可以使 作 域鏈,只有在 當前的 作 域內找不到才會向 級作 域 尋找,直到找不到為 存在同名變數時,在當前作 域內區域性變數 會覆蓋全域性變數,區域性變數優先順序 較 閉包簡單理解 可以調...
springcloud的 作原理
springcloud的 作原理 springcloud由以下 個核 元件構成 eureka 各個服務啟動時,eureka client都會將服務註冊到eureka server,並且eureka client還可以反過來從eureka server拉 取登錄檔,從 知道其他服務在哪 ribbon ...