4

デバッグ セッションで初めてビジュアライザーを表示しようとすると、その例外が発生し (下部に表示されます)、例外メッセージ ダイアログで [続行] をクリックし、ビジュアライザーを再度表示します ([虫眼鏡] ボタンをクリックして)。変数の横にあるアイコン) これは私が持っている単純なビジュアライザーです:

[assembly: DebuggerVisualizer(
    typeof(TestVisualizer),
    Target = typeof (string),
    Description = "Test Visualizer")]

namespace VuTree {
    public class TestVisualizer : DialogDebuggerVisualizer {
        protected override void Show(IDialogVisualizerService svc, IVisualizerObjectProvider provider) {
            var text = provider.GetObject() as string ?? "no object found...";
            using (var form = new Form())
            {
                form.Text = text;
                form.Size = new Size(400, 400);
                svc.ShowDialog(form);
            }
        }
    }
}

これは例外 (の一部) です。

************** Exception Text **************
System.Runtime.InteropServices.COMException (0x8013134F): Object is in a zombie state. (Exception from HRESULT: 0x8013134F)

Server stack trace: 
   at Microsoft.VisualStudio.DebuggerVisualizers.DebugViewerShim.IPropertyProxyEESide.InitSourceDataProvider(IEEDataStorage& data)
   at Microsoft.VisualStudio.DebuggerVisualizers.DebugViewerShim.ManagedShim.SafeProxyWrapper.InitSourceDataProvider()
   at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
   at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at Microsoft.VisualStudio.DebuggerVisualizers.DebugViewerShim.ManagedShim.SafeProxyWrapper.InitSourceDataProvider()
   at Microsoft.VisualStudio.DebuggerVisualizers.DebugViewerShim.ManagedShim.DelegatedHost.CreateViewer(IntPtr hwnd, HostServicesHelper hsh, SafeProxyWrapper proxy)

なぜそれが起こるのですか?それを解決する方法は?

4

1 に答える 1

5

一般に、ゾンビ状態とは、以前に (別のスレッドによって) 開始されたスレッドが最終的に作業を終了したときの状態ですが、それを作成した呼び出し元のスレッドに制御を返さなかったということです。 、これが彼らがゾンビと呼ぶ理由です。なぜなら、それは戻ってきて寿命を終えるはずですが、戻ったり死んだりしなかったからです。これまでのところ、この例外はデバッグ中にのみ表示されていました。Web アプリ、デスクトップ、win アプリなどで見ました。解決するには、アプリケーションを再起動するだけです。これにより、割り当てられたすべてのリソースが解放され、すべてが正常に戻るはずです。前回この例外に遭遇したのは、w3wp にデバッガーをアタッチした後、IIS でホストされている Web アプリケーションをデバッグしていたときでした。

于 2017-02-06T21:26:51.760 に答える