我有一些项目的解决方案。在不同的项目中有几个断点。我希望跟踪第一个到达这些断点之一的线程,并继续跟踪该单个线程,尽管其他线程进入相同的代码块。
我知道这是可能的,通过在断点上定义一个条件,即线程名称=…或者线程Id =…但我的案子是个沉重的ASPNET应用程序,一旦我附加到w3wp.exe许多线程将击中断点。我需要一些东西,比如ThreadLocal<断点>。
这可能吗?如果有,怎么做?
我有一些项目的解决方案。在不同的项目中有几个断点。我希望跟踪第一个到达这些断点之一的线程,并继续跟踪该单个线程,尽管其他线程进入相同的代码块。
我知道这是可能的,通过在断点上定义一个条件,即线程名称=…或者线程Id =…但我的案子是个沉重的ASPNET应用程序,一旦我附加到w3wp.exe许多线程将击中断点。我需要一些东西,比如ThreadLocal<断点>。
这可能吗?如果有,怎么做?
当前回答
我建议在活动服务器上添加应用程序的另一个实例,或者在相同的硬件上,或者在新的机器上(集群它),然后只调试该实例。我不会在用户触发的代码中添加断点。如果这不是一个选择,我将添加更多的跟踪。
然而,如果这是绝对必要的,并且您需要一个解决方案统计,我相信您可以添加一个断点,它只在请求来自您的IP地址时中断。您可以通过添加一个检查HttpContext.Request.UserHostAddress的条件断点来做到这一点。但是请注意,这会大大降低应用程序的速度。
其他回答
在VS 2019中:
在某处设置断点。 点击F5(继续)直到你的线程出现。 单击断点以删除它。 您可以使用F10或F11进行线程步进。
如果一个web应用程序正在生成多个线程,@MattFaus的答案将不起作用。我所做的是这样的
设置断点来中断我想要的函数中的线程。 一旦线程到达断点并被暂停,我删除断点并继续使用F8、F10和F11进行调试,以便其他线程可以运行。
以下是我所做的:
设置一个条件断点 知道只能说到点子上 我一直在寻找的 一旦到达断点,你就在你想要的线程中,在Visual Studio线程窗口(调试时,调试-> Windows ->线程),按Ctrl + A(选择所有线程),然后按Ctrl +单击你当前所在的线程。除了要调试的线程之外,您应该选中所有线程。 右键单击,选择“冻结”。
现在,Visual Studio只会逐步通过解冻的线程。这样做时,它似乎要慢得多,大概是因为它必须循环遍历所有冻结的线程,但它为我的多线程调试带来了一些理智。
在VS2019中,条件断点为tid == xxxxx 这样,断点将只在该线程上被命中
我建议在活动服务器上添加应用程序的另一个实例,或者在相同的硬件上,或者在新的机器上(集群它),然后只调试该实例。我不会在用户触发的代码中添加断点。如果这不是一个选择,我将添加更多的跟踪。
然而,如果这是绝对必要的,并且您需要一个解决方案统计,我相信您可以添加一个断点,它只在请求来自您的IP地址时中断。您可以通过添加一个检查HttpContext.Request.UserHostAddress的条件断点来做到这一点。但是请注意,这会大大降低应用程序的速度。