中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

C++在頭文件中定義singleton出現(xiàn)的問題-創(chuàng)新互聯(lián)

今天在公司里遇到一個很奇怪的core dump,初看起來,core dump的code在stl庫的hashtable里,完全沒有任何頭緒,甚至連core dump的原因都一籌莫展。

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括喀喇沁網(wǎng)站建設(shè)、喀喇沁網(wǎng)站制作、喀喇沁網(wǎng)頁制作以及喀喇沁網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,喀喇沁網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到喀喇沁省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

白天花了半天的時(shí)候看了一下hashtable的implementation,大概知道該去關(guān)注那些variable,之后用gdb把core dump加載起來,過了一遍幾個重點(diǎn)變量的值,確定了可能是某個singleton的值被correput了,導(dǎo)致原來的class member里的一個unordered_set的underlying的hashtable的值不對了。

經(jīng)過跟同事反復(fù)的討論,最后我們發(fā)現(xiàn)root cause是這樣的:

某個同事在頭文件A.h里定義了一個singleton:

static A& A::getInstance() {
    static A a;
    return a;
}

然后在某個被稱為plugin B的動態(tài)庫里include了這個頭文件,同時(shí)在binary C的Main.C里也include了這個頭文件。而binary C也同時(shí)通過dlopen加載plugin B。

注意這里就出現(xiàn)了問題,此時(shí)singleton已經(jīng)不完全是singleton了。通過nm命令可以看到binary C和plugin B的symbol table里都有A::getInstance(),并且他們在data section里的地址是不同的,此時(shí)問題已經(jīng)很明顯了。

進(jìn)一步觀察core dump發(fā)生時(shí)的behavior,在那個時(shí)間點(diǎn)binary C reload了一次plugin B,同事懷疑在unload動態(tài)庫的時(shí)候?qū)@個static變量作了一次析構(gòu),而之后重新load plugin B以后,plugin B使用的singleton變量的地址實(shí)際還是binary C的,這時(shí)候binary C里的static變量已經(jīng)被析構(gòu)了,所以造成了ub,同時(shí)造成了core dump!

我們通過一個很簡單的reproducer去重現(xiàn)了core dump,證實(shí)了我們的猜想。

(?code)

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前文章:C++在頭文件中定義singleton出現(xiàn)的問題-創(chuàng)新互聯(lián)
文章路徑:http://www.rwnh.cn/article44/dcishe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、關(guān)鍵詞優(yōu)化、企業(yè)網(wǎng)站制作、品牌網(wǎng)站制作、用戶體驗(yàn)、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
永寿县| 新营市| 定陶县| 开封市| 清苑县| 宣威市| 梁山县| 崇义县| 景泰县| 搜索| 靖西县| 扶风县| 谷城县| 桐城市| 临城县| 平原县| 子长县| 大余县| 马边| 西畴县| 北碚区| 延津县| 靖西县| 陇西县| 吉安县| 洪雅县| 东至县| 石景山区| 中阳县| 新津县| 祥云县| 登封市| 西贡区| 佛学| 岑巩县| 原平市| 嘉义市| 泰顺县| 建德市| 永仁县| 彭阳县|