托管调试助手报错
今天在調(diào)試程序時出現(xiàn)下面的異常:
其他信息: CLR 無法從COM 上下文0x1a0e50 轉(zhuǎn)換為COM 上下文0x1a0fc0,這種狀態(tài)已持續(xù)60 秒。擁有目標上下文/單元的線程很有可能執(zhí)行的是非泵式等待或者在不發(fā)送Windows 消息的情況下處理一個運行時間非常長的操作。這種情況通常會影響到性能,甚至可能導(dǎo)致應(yīng)用程序不響應(yīng)或者使用的內(nèi)存隨時間不斷累積。要避免此問題,所有單線程單元(STA)線程都應(yīng)使用泵式等待基元(如CoWaitForMultipleHandles),并在運行時間很長的操作過程中定期發(fā)送消息。
通過代碼沒有找出異常,網(wǎng)上有人說把,調(diào)試--異常中的contextswitchDeadlock選項去掉:
按照說明去掉后確實沒有此問題,但不明白出現(xiàn)這種情況的原因是代碼處理不恰當(dāng)造成的,還是說編譯器有問題,期待高手的賜教。
?
?
?
正試圖在 os 加載程序鎖內(nèi)執(zhí)行托管代碼。不要嘗試在 DllMain 或映像初始化函數(shù)內(nèi)運行托管代碼,這樣做會導(dǎo)致應(yīng)用程序掛起。
.NET2.0中增加了42種非常強大的調(diào)試助手(MDA,Loaderlock 是其中之一。Loaderlock檢測在一個擁有操作系統(tǒng)loader lock的線程上(如上例的video的運行線程)運行托管代碼的情況。這樣做有可能會引起死鎖,并且有可能在操作系統(tǒng)加載器初始化DLL前被使用。雖然這樣做很有必要,但在進行開發(fā)調(diào)試的時候,實在太麻煩
這是由于正在加載特定資源:例如換膚控件時
- 辦法一
- 把vs2005菜單的 調(diào)試->異常->Managed Debuggin Assistants->LoaderLock 的選中狀態(tài)去掉
- 如果異常(exception)這一項沒有的話,在工具---自定義---命令選項卡---左邊選擇調(diào)試--右邊把異常托到菜單里
- 快捷鍵Ctrl+Alt+E,修改Managed Debuggin Assistants->LoaderLock 的選中狀態(tài)去掉
- 方法二
- 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework下面增加一個String,值為"0"
??? 不過這樣做,在該計算機上所有基于.NET2.0開發(fā)都得不到MDA的好處
轉(zhuǎn)載于:https://www.cnblogs.com/Allen_Jo/archive/2009/10/27/1590515.html
總結(jié)
- 上一篇: “正声感元化”下一句是什么
- 下一篇: 原来AGILE就是这么一回事啊!