让多线程调试更简单的宏代码---FreezeThawThreads
2010-03-18 14:44
627 查看
多线程程序的调试是一件比较麻烦的事,在我的这篇博文里介绍了两个方便多线程调试的特性(一个是VS特性,一个是John Robbin的InterestingThread宏),今天我再来介绍John Robbin的另一个宏。如果你希望在调试多线程程序时只运行一个线程,而将其它的线程全部暂时Freeze掉,请尝试使用FreezeThawThreads宏。John Robbin原文帖出来的宏代码有一些排版的错误,导致不能编译通过,我已经做了修改,下面是可以编译通过的代码版本:
FreezeThawThreads
FreezeThawThreads
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '' Wintellect Debugging Code '' Copyright © 1997-2009 John Robbins ' -- All rights reserved. '' Freeze and thaw threads in bulk. '' '' Version 1.0 - July 17, 2009 '' - Initial version. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Imports System Imports EnvDTE Imports EnvDTE80 Imports EnvDTE90 Imports System.Diagnostics Imports System.Text Imports System.Collections.Generic Imports System.Runtime.InteropServices Imports System.Windows.Forms Public Module FreezeThawThreads Public Sub FreezeAllButActiveThread() Dim dbg As EnvDTE90.Debugger3 = CType(DTE.Debugger, Debugger3) If dbg.CurrentMode = dbgDebugMode.dbgBreakMode Then Dim currProg As Program = dbg.CurrentProgram For Each t As Thread2 In currProg.Threads If (t.ID <> dbg.CurrentThread.ID) Then If t.IsFrozen = False Then t.Freeze() End If End If Next Else NotInBreakMode() End If End Sub Public Sub ThawAllFrozenThreads() Dim dbg As EnvDTE90.Debugger3 = CType(DTE.Debugger, Debugger3) If dbg.CurrentMode = dbgDebugMode.dbgBreakMode Then Dim currProg As Program = dbg.CurrentProgram For Each t As Thread2 In currProg.Threads If t.IsFrozen = True Then t.Thaw() End If Next Else NotInBreakMode() End If End Sub Private Sub NotInBreakMode() MessageBox.Show(New MainWindow(), "You mustbe stopped in the debugger for this macro to work", "Wintellect Thread Freeze/Thaw Macros", MessageBoxButtons.OK, MessageBoxIcon.Error) End Sub ' A helper class so I can parent message boxes correctly on the IDE. Class MainWindow Implements IWin32Window Public ReadOnly Property Handle() _ As System.IntPtr Implements IWin32Window.Handle Get ' The HWnd property is undocumented. Dim ret As IntPtr = CType(DTE.MainWindow.HWnd, IntPtr) Return (ret) End Get End Property End Class End Module
相关文章推荐
- 最简单的java多线程代码(重写thread或者runnable的run方法)
- 多线程之简单定时器的实现代码
- C#使用读写锁三行代码简单解决多线程并发写入文件时线程同步的问题
- Console命令详解,让调试js代码变得更简单
- Firebug的Console命令详解,让调试js代码变得更简单
- Console命令详解,让调试js代码变得更简单
- 用gdb调试python多线程代码-记一次死锁的发现
- Console命令详解,让调试js代码变得更简单
- Java编程之多线程死锁与线程间通信简单实现代码
- Eclipse调试多线程代码
- Console命令详解,让调试js代码变得更简单
- python下多线程简单代码示例
- 一份简单的在 Linux下编译及调试 C 代码的指南
- Console命令详解,让调试js代码变得更简单
- FFMPEG-0.11.1分析之ffmpeg结构(简单涉及)与代码流程(数据流、多线程)【很乱,建议直接看其中包含的原文连接】
- Firebug控制台详解,让调试js代码变得更简单
- Eclipse调试多线程代码,在debug的时候
- jdb调试scala代码的简单介绍
- Console命令详解,让调试js代码变得更简单
- mini2440 nandflash简单读写调试成功 代码记录