linux coredump及函數棧空間大小分析


1.應用案例

有時在程序main未來及設置啟動coredump時,程序就崩潰了,這時可以寫一個啟動腳本來

啟動該程序,並在該腳本中打開coredump、設置core文件格式,啟動腳本如下所示

  使用該腳本啟動程序./threadstack(測試程序)

2.coredump介紹

 3. C代碼設置coredump

  4.linux函數棧空間大小分析

4.1.RLIMIT_STACK參數

進程的RLIMIT_STATCK的默認棧大小是從其父進程繼承的。

進程默認棧空間大小是8M(1024*1024*8=8388608),可以在main函數開頭執行

getrlimit(RLIMIT_STATCK,&stackr)來獲取默認值。如果在main函數中執行

setrlimit(RLIMIT_STACK, &stackr)設置棧空間小於8M或大於8M,那么該設置對

當前進程沒有影響,其棧空間上限仍為8M,但該設置可以改變其子進程的默認棧空間大小。

如果欲改變某目標程序的默認棧空間小於8M或大於8M,可以為其前置一個父進程,在父進

程中設置棧空間不等於8M,父進程再啟動該目標程序進程,如下圖:

腳本進程把棧空間設置為10M,再拉起目標程序threadstack,threadstack的默認棧空間變為10M。

  當前進程使用RLIMIT_STACK設置改變的棧大小對當前進程所創建線程的棧空間不起作用。

4.2.pthread_attr_setstacksize

當前進程使用RLIMIT_STACK設置改變的棧大小對當前進程所創建線程的棧空間不起作用,

線程的默認棧大小也是從其父進程繼承的,等於進程RLIMIT_STACK默認棧大小。

pthread_attr_getstacksize()獲取線程的默認棧大小,如下圖所示。

如果要改變線程默認棧大小,有兩種方式,要么在其父進程中使用RLIMIT_STACK改變棧大小,

要么在phread_create()時使用pthread_attr_setstacksize()改變棧大小,如下圖所示。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM