2013-02-07 119 views
10

問題:Visual Studio 2010的掛在跟蹤點

每當我試圖打破或設置在調試器跟蹤點,我們的應用程序和Visual Studio完全凍結。分離調試器後,應用程序繼續。

此問題可能與WPF有關。我們已將我們的WinForm應用程序遷移到WPF。從那以後就會出現這個問題但我不能找到導致問題的代碼的特定部分。我已經回滾了數百次提交,但沒有成功。

它也可能與UI線程有關。如果斷點設置在遠離UI邏輯的地方,那麼應用程序不會凍結,或者不會像UI線程中那樣經常凍結。

[編輯:] 我使用的是Windows 7 64位與Visual Studio 2010

[更新:]

當Visual Studio掛起,和我嘗試顯示斷點之前分離,消息「無法從一個或多個進程分離,所有未完成的func-evals尚未完成」。但是我已經禁用了調試選項中的所有func評估。 我認爲我的問題是由func_evaluation導致的,無法完成或運行到超時。

有沒有辦法看到func_evaluation visual studio掛在哪裏?

例子:

class SomeUiViewPresenterExample 
{ 
    private Timer m_Timer; 

public void Init() 
{ 
    m_Timer = new Timer(); 
    m_Timer.Elapsed += ElapsedFoo(); 
    m_Timer.AutoReset = false; 
    m_Timer.Interval = 200; 
} 

private void ElapsedFoo(object sender, ElapsedEventArgs elapsedEventArgs) 
{ 
    // there is no code inside this method 
    // On the next line a trace point with "---> ElapsedFoo called" will freeze the debugger 
} 

我已經嘗試過:(沒有成功)

  • 啓用/禁用主機進程
  • 試圖調試x86和x64處理
  • 推出visual studio with/SafeMode
  • NGEN更新
  • 禁用「財產評估和其他隱函數調用」在調試選項
  • 禁用符號服務器
  • 禁用符號加載
  • 刪除WPF字體緩存
  • 標記幾個UI與「DebuggerDisplay元素( 「無表達一些文本」)」

Ticket Microsoft Connect

可能相關的問題:

因爲我們的應用程序使用.NET遠程與另一個進程進行溝通,我的問題我是作爲here類似的東西。我已經將所有的註冊事件都放到了自己的任務中,但沒有成功。

從調試的Visual Studio 調試器輸出:

我附上一個調試器Visual Studio和已觀察到一些例外,(80010005)

,但我不知道wheter它們是相關的我的問題或不:

(18d8.1708): C++ EH exception - code e06d7363 (first chance) 
(18d8.1708): C++ EH exception - code e06d7363 (first chance) 
..... // snip 
(18d8.18dc): **Unknown exception - code 80010005 (first chance) 
..... // 20 seconds freeze until breakpoint hit in IDE 

(18d8.18dc): Unknown exception - code 80010005 (first chance) 
(18d8.18dc): C++ EH exception - code e06d7363 (first chance) 
ModLoad: 365f0000 36665000 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\mcee.dll 

// after continue execution debugger and debugged process freezes forever 

(18d8.18dc): Unknown exception - code 80010005 (first chance) 
ModLoad: 00000000`02b90000 00000000`02c1c000 C:\Windows\SysWOW64\UIAutomationCore.dll 
(18d8.1a8c): CLR exception - code e0434352 (first chance) 
(18d8.1a8c): CLR exception - code e0434352 (first chance) 
(18d8.1a8c): CLR exception - code e0434352 (first chance) 
(18d8.1a8c): CLR exception - code e0434352 (first chance) 
(18d8.1a8c): CLR exception - code e0434352 (first chance) 
(18d8.1a8c): CLR exception - code e0434352 (first chance) 
(18d8.1a8c): CLR exception - code e0434352 (first chance) 
(18d8.1a8c): CLR exception - code e0434352 (first chance) 

謝謝你的任何想法或暗示

Manuel

+0

只是一個小點。如果您使用的是WPF,請使用'System.Windows.Threading.DispatcherTimer'(WPF計時器)而不是一般的C#計時器。不知道如果這能解決你的問題。 – sircodesalot

+0

感謝您的提示。但是在這種情況下,操作不應該在UI線程上執行。此操作應該在單獨的線程上運行,因爲它只更新數據上下文(需要一段時間)並觸發屬性更改的事件。 –

+0

哪個版本的Visual Studio? – OmegaMan

回答

1

謝謝你的提示。最後,我安裝了VS 2012,調試器現在正常運行。看來在Visual Studio 2010調試器中確實存在一個錯誤/性能問題。

1

我越看越這個,我越懷疑它是因爲你沒有使用WPF計時器。如果您嘗試使用常規的Timer類而不是WPF Dispatcher計時器,則可能會嘗試更新非ui線程上的UI - 這可能會成爲問題的原因(因爲DataContext是UI在技術上)。

此處瞭解詳情:

DispatcherTimer vs a regular Timer in WPF app for a task scheduler

+0

不,我認爲從非UI線程更新數據上下文是正確的。 –

+0

對,但是當你說:if(null!= DataContext)時,它看起來像是實際觸及view.DataContext屬性,而不僅僅是datacontext本身。試着把這條線路看出來,看看會發生什麼。 – sircodesalot

+0

或者嘗試使用調度計時器,看看是否沒有解決問題。您的代碼可以保持幾乎相同,只需將計時器的名稱更改爲System.Windows.Threading.DispatcherTimer即可。如果結果是這樣,那麼你仍然可以在另一個線程上執行代碼,當你想對UI對象進行最後的修改時,你只需要使用'Invoke'(即將執行移回到主線程) 。 – sircodesalot