【发布时间】: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