<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          一個(gè)LoadLibrary導(dǎo)致程序死機(jī)的Bug的診斷 您所在的位置:網(wǎng)站首頁 屬猴的人方位 一個(gè)LoadLibrary導(dǎo)致程序死機(jī)的Bug的診斷

          一個(gè)LoadLibrary導(dǎo)致程序死機(jī)的Bug的診斷

          2023-09-23 01:41| 來源: 網(wǎng)絡(luò)整理| 查看: 265

          前一陣子做一個(gè)項(xiàng)目,封裝了Libtorrent這個(gè)BT庫(kù),然后我把它封裝了一下,導(dǎo)出了幾個(gè)函數(shù),然后奇怪的發(fā)現(xiàn),在LoadLibrary這個(gè)封裝好的DLL時(shí)候,程序發(fā)生了死鎖,就是在LoadLibrary該DLL的時(shí)候,程序無論如何也執(zhí)行不下去了。

          這時(shí)候我們一般的思路是調(diào)試一下該DLL,于是我也這樣做了,結(jié)果我驚奇的發(fā)現(xiàn),DllMain沒有被調(diào)用,也就是說,程序在調(diào)用DllMain之前就死掉了。

          于是我想,會(huì)不會(huì)是LoadLibrary找不到DllMain的入口點(diǎn),于是我在項(xiàng)目的設(shè)置里手動(dòng)設(shè)置了DllMain,結(jié)果,程序運(yùn)行下去了。。。

          到這里,也許大家以為這個(gè)問題已經(jīng)解決了,但是事實(shí)上,程序雖然執(zhí)行下去了,但卻產(chǎn)生了很多不正確的結(jié)果,我再次打開DLL工程調(diào)試,結(jié)果發(fā)現(xiàn),很多全局對(duì)象沒有初始化,這時(shí)候我恍然大悟,于是我在某個(gè)對(duì)象的構(gòu)造函數(shù)上設(shè)了斷點(diǎn),果不其然的,該構(gòu)造函數(shù)沒有被執(zhí)行,到這里,不知道大家是否想到了死鎖的真正原因。

          死鎖的真正原因就是,程序在調(diào)用DllMain之前,會(huì)調(diào)用全局對(duì)象的構(gòu)造函數(shù)創(chuàng)建對(duì)象,而恰恰在構(gòu)造該對(duì)象的時(shí)候,程序死掉了,所以DllMain還沒來得及執(zhí)行,程序就死鎖了,至于為什么該對(duì)象定義成全局變量以后就會(huì)死鎖,超出了本文討論的范圍,在此不做闡述。

          此文只是給大家提供一個(gè)簡(jiǎn)單的思路,當(dāng)發(fā)生了類似的奇怪狀況時(shí),該如何解決。另外想說的是,沒有解決不了的問題,只有懶惰的人,只要你堅(jiān)持探索真相,問題總是能水落石出。



          【本文地址】

          公司簡(jiǎn)介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專題文章
            CopyRight 2018-2019 實(shí)驗(yàn)室設(shè)備網(wǎng) 版權(quán)所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 富平县| 开江县| 嘉善县| 永顺县| 丘北县| 临高县| 三台县| 梁山县| 台江县| 凉城县| 繁昌县| 眉山市| 长顺县| 盈江县| 思茅市| 旬阳县| 乌兰县| 华宁县| 河池市| 团风县| 湖州市| 晋宁县| 黄冈市| 静乐县| 外汇| 彰化市| 临武县| 公主岭市| 丰台区| 隆昌县| 宣化县| 巫山县| 泊头市| 林西县| 平原县| 灵台县| 报价| 江华| 礼泉县| 石台县| 牙克石市| http://444 http://444 http://444 http://444 http://444 http://444