同时使用两个调试器时应用程序挂起

Application hangs when using two debugger at the same time

我同时有两个相同的控制台应用程序 运行。 以下为C#代码摘录

IIgnite ignite = Ignition.Start(config);

ICache<int, string> cache = ignite.GetOrCreateCache<int, string>("CC");

如果我在 GetOrCreateCache 行放置断点并为两个应用程序启动调试模式,第一个 运行 应用程序将命中断点,但第二个不会。第二个就挂在那里。

我查看了日志。一直在重复下面的内容

Next node remains the same [nextId=d0bb3ac1-03ae-4833-b739-465c4e3db0d1, nextOrder=1]
Message has been sent to next node [msg=TcpDiscoveryHeartbeatMessage [super=TcpDiscoveryAbstractMessage [sndNodeId=26a833d1-7ca1-4482-9bf4-99fa837681ce, id=333395e7b51-d0bb3ac1-03ae-4833-b739-465c4e3db0d1, verifierNodeId=d0bb3ac1-03ae-4833-b739-465c4e3db0d1, topVer=0, pendingIdx=0, failedNodes=null, isClient=false]], next=d0bb3ac1-03ae-4833-b739-465c4e3db0d1, res=1]
Message has been received: TcpDiscoveryHeartbeatMessage [super=TcpDiscoveryAbstractMessage [sndNodeId=26a833d1-7ca1-4482-9bf4-99fa837681ce, id=333395e7b51-d0bb3ac1-03ae-4833-b739-465c4e3db0d1, verifierNodeId=d0bb3ac1-03ae-4833-b739-465c4e3db0d1, topVer=0, pendingIdx=0, failedNodes=null, isClient=false]]
Processing message [cls=TcpDiscoveryHeartbeatMessage, id=333395e7b51-d0bb3ac1-03ae-4833-b739-465c4e3db0d1]
Message has been added to queue: TcpDiscoveryHeartbeatMessage [super=TcpDiscoveryAbstractMessage [sndNodeId=26a833d1-7ca1-4482-9bf4-99fa837681ce, id=333395e7b51-d0bb3ac1-03ae-4833-b739-465c4e3db0d1, verifierNodeId=d0bb3ac1-03ae-4833-b739-465c4e3db0d1, topVer=0, pendingIdx=0, failedNodes=null, isClient=false]]
Discovery notification [node=TcpDiscoveryNode [id=4cd6f0f5-2f75-4375-97fa-b7f6e4e2c0cd, addrs=[0:0:0:0:0:0:0:1, 127.0.0.1, 172.30.29.142], sockAddrs=[EDISONCWRK2.meridianlink.com/172.30.29.142:47501, /0:0:0:0:0:0:0:1:47501, /127.0.0.1:47501], discPort=47501, order=4, intOrder=4, lastExchangeTime=1492473879345, loc=true, ver=1.9.0#20170302-sha1:0be92732, isClient=false], spiState=CONNECTED, type=NODE_METRICS_UPDATED, topVer=4]

有谁知道原因或如何解决问题? 我问这个问题是因为我正在团队中从事一个项目。 如果多个团队成员同时调试,可能会出现问题。

环境:Ignite.NET1.9,Visual Studio2015

您的两个应用程序加入同一个 Ignite 集群。当一个节点停在断点处时,所有线程都被挂起。此节点不再响应网络通信。这就是导致另一个节点挂起的原因 - 它等待响应。

您必须避免暂停一个应用程序并同时调试另一个应用程序。

关于团队合作,每个团队成员都应该在自己隔离的环境中工作,避免干扰他人。这可以通过设置防火墙规则或像这样调整 IgniteConfiguration 来实现:

        var c = new IgniteConfiguration
        {
            Localhost = "127.0.0.1",
            DiscoverySpi = new TcpDiscoverySpi
            {
                IpFinder = new TcpDiscoveryStaticIpFinder
                {
                    Endpoints = new[] {"127.0.0.1:47500"}
                },
            }
        };