探討說(shuō)明VS2003程序不能調(diào)試的問(wèn)題
今天我和同事們研究了一下午,有個(gè)問(wèn)題始終搞不定。她的VS2003程序不能調(diào)試,設(shè)置的斷點(diǎn)不會(huì)停下來(lái),重裝了機(jī)器也沒(méi)有解決問(wèn)題。看來(lái)想到的辦法應(yīng)該都用完了,不過(guò)我也沒(méi)有思路,我電腦上裝的是VS2005不能用來(lái)開(kāi)發(fā)基于.NET的ArcObjects程序,不過(guò)也得硬著頭皮上,誰(shuí)叫我是經(jīng)理呢。
我懷疑是項(xiàng)目文件是不是有問(wèn)題,讓她把文件遷移到新建的項(xiàng)目中。后來(lái)她發(fā)短信告訴我,說(shuō)找到原因了,但是不知道怎么解決。問(wèn)題變得更加詭異,能夠運(yùn)行兩三次,然后就不行了。
她發(fā)現(xiàn)是MapControl的WhereClause設(shè)置不對(duì)VS2003導(dǎo)致程序拋出異常。另外她把代碼發(fā)過(guò)來(lái)給我看看,非常簡(jiǎn)單一個(gè)MapControl然后加一個(gè)Command工程。怎么會(huì)這么怪呢,越來(lái)越怪了。我在看她的代碼時(shí)發(fā)現(xiàn)一個(gè)問(wèn)題,她用下面的語(yǔ)句來(lái)釋放ArcObjects:
ESRI.ArcGIS.Utility.COMSupport.AOUninitialize.Shutdown();
m_AoInitialize.Shutdown(); // 釋放 COM 對(duì)象
我查了一下代碼沒(méi)有m_AoInitialize.Initialize()的語(yǔ)句,沒(méi)有初始化。
#t#然后我讓她看看運(yùn)行結(jié)束是否有AppROT.exe在,不過(guò)這個(gè)VS2003程序不一定是程序留下的,啟動(dòng)了ArcMap或者ArcCatalog也會(huì)有。但是如果這些程序沒(méi)有啟動(dòng)也有的話就有問(wèn)題了。的確有這樣的事情,而且在別人機(jī)器上也是這個(gè)樣子,只是能夠調(diào)試的次數(shù)不一樣而已。此時(shí)我已經(jīng)基本上確定是這樣回事了,讓她去掉后面的m_AoInitialize.Shutdown()看看,但是她忙別的取了,我同學(xué)在旁邊催我收拾東西下班了。
因?yàn)闆](méi)有得到確認(rèn),所以上車后我發(fā)了條短信問(wèn)了一下,許久,我已經(jīng)到家了才回。的確如我所預(yù)料的那樣,就是那么回事。通過(guò)QQ等聊天工具幫助別人解決VS2003程序問(wèn)題,比在現(xiàn)場(chǎng)解決難度大很多,很多時(shí)候沒(méi)有思路,但是經(jīng)過(guò)幾次嘗試就有了思路,通過(guò)QQ這個(gè)確認(rèn)的過(guò)程比較長(zhǎng),需要思考的時(shí)間比較多。
這讓我想起了火星機(jī)器人,我是在遠(yuǎn)程遙控驗(yàn)證我的猜測(cè),但是反饋比較慢,驗(yàn)證的東西相對(duì)來(lái)說(shuō)比較少,需要深思熟慮后才去驗(yàn)證。但是這種方式可以清晰看出一個(gè)人的思路,是怎么分析問(wèn)題的,被幫助的人收獲很大,被迫把自己的思路暴露出來(lái)。