使用Visual Studio 2010调试后台线程时,有没有什么好办法让其他线程运行几百毫秒左右而不会推进一个位于断点处的线程?等效于在当前行之前插入“Threading.Thread.Sleep(100)”,在那里设置下一个语句,然后点击恢复(但没有破解正在调试的代码)?我的数据包记录/显示代码没有那么有用,因为调试器经常在我的代码对数据包执行的时间和UI设法显示它的时间之间达到断点。
我知道可以进入Threads窗口,冻结到达断点的线程,命中运行,点击暂停,并解冻到达断点的线程,但这真的很笨重。有更平稳的做事方式吗?
(编辑)为什么没有回答我想知道?我无法相信我是唯一一个尝试调试非UI线程的人。
答案 0 :(得分:3)
我会在Visual Studio中使用宏来完成您概述的操作。
在正确的时间点记录宏(Tools
,Macros
,Record TemporaryMacro
)然后保存它应该是一件简单的事情。
您可以随时添加图标/键盘快捷键,以便稍后再次运行宏。
甚至可以将源代码调整到宏,以确保它完全按照您的需要执行操作。
编辑#1:作为提示我会想象代码看起来有点像这样(未经测试):
Dim t As Thread
t = DTE.Debugger.CurrentThread
t.Freeze()
DTE.Debugger.Go(False)
Beep()
Threading.Thread.Sleep(5000)
Beep()
DTE.Debugger.Break(True)
DTE.Debugger.CurrentThread = t;
t.Thaw()
编辑#2: 您可能想要参考:EnvDTE.Debugger
标准进口供您参考:
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics