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()改變棧大小,如下圖所示。