【问题标题】:How to create a conditional breakpoint on a socket port?如何在套接字端口上创建条件断点?
【发布时间】:2022-12-01 11:36:28
【问题描述】:

我正在开发一个 C# 应用程序,使用 TCP 套接字。为此,有以下几行源代码:

using System.Net.Sockets;
...
var sock = (Socket)ar.AsyncState;
...
if (sock.Connected)
...

对于 TCP 端口等于 123 的情况,我想在最后一行有一个条件断点。
为了实现这一点,我在监视窗口中输入了sock,并进一步寻找端口。找到后,我执行“添加手表”,手表窗口中出现以下内容:

((System.Net.IPEndPoint)sock.RemoteEndPoint).Port

因此,我决定将其用作条件断点的入口:

Conditional Expression
Is true 
((System.Net.IPEndPoint)sock.RemoteEndPoint).Port == 123

但是,这会产生以下错误消息:

断点错误:断点条件执行失败。条件是“((System.Net.IPEndPoint)sock.RemoteEndPoint).Port == 123”。返回的错误是“评估方法 System.Net.Sockets.Socket.get_RemoteEndPoint() 调用本机方法 Interop+Sys.SetAddressFamily(byte*, int, int)”。不支持在此上下文中评估本机方法。'。单击“确定”在该断点处停止。

如何为此值创建条件断点?

【问题讨论】:

  • 不幸的是,由于给定的原因,您似乎不能。无论如何,条件断点都很慢,这对于套接字代码之类的东西来说并不理想(调试器必须中断、评估条件并决定是否恢复)。如果您可以修改代码,只需在其中放置一个if,或者在正文中使用断点或Debugger.Break()
  • @canton7:添加这样的 if-condition 是我的解决方法,直到有人在这里给我一个答案,但显然这是不可能的。如果你确定这是不可能的,你可以写这个作为答案,我会接受它。
  • 尽量不要添加表达式来观看,只需将其添加到您的代码中,有点if (condition) Debugger.Break()

标签: c# visual-studio sockets debugging conditional-breakpoint


【解决方案1】:

你试过了吗int tmpPort=((System.Net.IPEndPoint)sock.RemoteEndPoint).Port;

然后加:

Conditional Expression
Is true
tmpPort == 123

不过canton7说的,我们更倾向于用一个if,然后在里面加一个breakpoint,或者用Debugger.Break()来达到效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2010-12-16
    • 2010-09-17
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多