至少我碰到了三個情況,都是AppCrash錯誤(以下都指VS2008的Release的設置)
第1個錯誤,報錯模塊是程序自己
我使用VS2008 Team with SP1和QT4.86編譯程序,一直在本機上運行沒什么問題,編譯出的exe文件在別的機子上運行沒問題(https發送有問題,但這是另外一回事)。后來VS2008 TEAM三個月試用期滿,於是卸載掉換成ZWT的VS2008 PRO,打上補丁SP1。奇怪的是使用VS2008 PRO編譯出來的程序會報AppCrash錯誤,程序登錄界面都無法出來,莫名其妙之余也不想研究了,卸載PRO后重裝TEAM,果然這個AppCrash錯誤消失了。但別的原因造成的AppCrash還在。
-------------------------------------------------------------------------------------
第2個錯誤,報錯模塊是ntdll.dll。后查明是由於VS2008項目屬性沒有設置好。
原來報錯的原因是CRT庫的錯誤選擇,即Ingore Specific Library填寫了msvcmrt.lib,Additional Dependencies 漏寫了 libcmt.lib,導致雖然編譯鏈接都通過,但執行有問題(登錄沒問題,使用外部庫上傳文件有問題)。 應該如下設置:
Linker的input頁面,Additional Dependencies,應該設置為:
qtmain.lib QtCore4.lib QtGui4.lib QtXml4.lib QtNetwork4.lib msvcrt.lib (千萬注意最后一項,不是msvcmrt.lib)
Ingore Specific Library應該設置為:
libcmt.lib (不是msvcrt.lib)
-------------------------------------------------------------------------------------
第3個錯誤,報錯模塊是程序自己(能出現登錄框,但無法登陸,也無法從服務器獲得XML應答,點擊登錄按鈕后程序直接AppCrash了),且在安全網絡模式下執行也是同樣的錯誤。
問題簽名:
問題事件名稱: APPCRASH
應用程序名: bak61_AppCrash.exe
應用程序版本: 0.0.0.0
應用程序時間戳: 545c9b1b
故障模塊名稱: bak61_AppCrash.exe
故障模塊版本: 0.0.0.0
故障模塊時間戳: 545c9b1b
異常代碼: c0000005
異常偏移: 000151bf
OS 版本: 6.1.7600.2.0.0.256.1
區域設置 ID: 2052
其他信息 1: 0a9e
其他信息 2: 0a9e372d3b4ad19135b953a78882e789
其他信息 3: 0a9e
其他信息 4: 0a9e372d3b4ad19135b953a78882e789
聯機閱讀隱私聲明:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0804
如果無法獲取聯機隱私聲明,請脫機閱讀我們的隱私聲明:
C:\Windows\system32\zh-CN\erofflps.txt
最后原因找到了:我去掉登錄框的進度條的時候,去掉了new,卻照常使用:
//remember_label = new QProgressBar();
remember_label->setVisible(true);
但最奇怪的是,在我本機上(開發機子),無論是VS直接生成運行,還是拷貝到本機別處生成運行,都沒有問題,但是拷貝到別的機子上立即歇菜。但是為什么本機沒事呢,難道什么地方對內存訪問設置的更寬松了(網上搜的答案:軟件級別的解決方案是加入DEP例外列表,網上評論一片叫好,可是我的程序被拒絕加入到這個列表)?我的機子裝了Delphi 2010/XE/XE5和VS2005/2008/2010/2012。哪位大大知道還請告知。
-------------------------------------------------------------------------------------
總結:三個錯誤,其中2個都是自己對VS設置和相關類庫不熟悉造成的,光覺得VS Studio IDE好用,不知道真正做項目時VS的編譯器連接器里一堆坑,這還沒算C++編譯設置,特別是Code Generation的設置,另外還有Character Set對QString和Char*之間的轉換有什么影響仍未清楚。第三個錯誤是自己使用未實例化的變量,當然出錯,但是在本機上運行怎么樣都不出錯,也是百思不得其解。
備注:三個問題都與qt的dll無關,一開始千小心萬小心dll,根本就是走錯方向了,奇怪怎么也不見網上的QT前輩講講我碰到的那些問題?
