動態鏈結MFC引發的血案

2021-05-22 03:27:08 字數 832 閱讀 8604

首先簡單描述下程式執行的步驟,

我們要去載入兩個dll,先載入的稱為a,後載入的稱為b,載入a在裡面做的事情是動態建立乙個全域性物件,載入b在裡面做的事情是取得這個全域性物件,然後幹其他事情。

我們機子上執行的非常完美。但在使用者的機子上卻沒法執行。報錯直接說這個全域性物件為空,並沒被初始化。真是奇了怪了。

開始認為我們的載入順序有問題,查了下**,沒問題!

我們把程式放在win7下測試,也沒問題。後來另一位同事在另個新系統下面測試,bug重現!然後同事想把visual studio裝上除錯,居然又執行完好。頭兒提醒可能是載入a沒成功。於是解除安裝vs,先在a中打上日誌,又在載入a之前打上日誌,一看,發現果然是這個問題!!

但為啥會載入失敗呢?用depends檢視a有兩個依賴的dll未知!另外還有個幫忙的同事提醒說,載入失敗,可能是由於清單檔案所依賴的元件在新安的系統並沒有。一看清單*.mainifest檔案,果然如此,多了兩個外來的動態依賴庫,

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

但轉念一想,不對啊,b都沒這兩個外來元件引入的清單,a怎麼多了這兩個東西!

將a和b對比編譯配置,完全相同,百思不得其解!

幫忙的同事又說,a所依賴的我們專案中的dll會不會有動態庫?一查,果然如此,另乙個的編譯選項居然是use mfc in a share dll!照理說應該編譯過不了,但可愛的同事用忽略庫的辦法將其編譯錯誤去掉,於是導致a生成的清單檔案上會出現上述內容。

應該說,粗心是不可避免的。

但有幾點需要以後注意的:

1. 捕獲異常措施不夠,是其本質原因。

2. 測試環境需要真正模擬玩家環境。

signed unsigned 引發的血案

bug描述 問題產生於區域網傳輸一幅。服務端負責傳送,是由另乙個同事用c 寫的,我用c 寫接收客戶端。我們約定在傳輸一幅前,先傳固定4個位元組的size資訊,然後傳資料。結果發現有些總是末尾壞掉一截或是乾脆就傳不過來。bug原因 在我接收到size 4 後,我採用了size size 3 256 2...

merge all引發的血案

在訓練深度神經網路的時候,我們經常會使用dropout,然而在test的時候,需要把dropout撤掉.為了應對這種問題,我們通常要建立兩個模型,讓他們共享變數。詳情.為了使用tensorboard來視覺化我們的資料,我們會經常使用summary,最終都會用乙個簡單的merge all函式來管理我們...

parseInt引發的血案

今天做了個專題活動,頁面頭上有個倒計時 專題做完後上線了,沒發現有什麼問題,結果,運營mm突然和我說 技術哥哥出問題了,360瀏覽器在秒數從10到09的時候直接變成 00 了 一看我去真的,該死的360 還有ie7 這個倒計時的原理是先獲取系統時間.分鐘,秒,毫秒賦值在span上面 span id ...