您的当前位置:首页正文

windbg .net 程序的死锁检测 常用方法(个人备份笔记)

2023-11-10 来源:好兔宠物网

0:004> !dlk0:000> !mk -a

 

The mk command displays a call stack of the currently selected thread (including both managed and unmanaged frames). The command has now been extended to support the -a switch which outputs both the local variables as well as parameters (combination of -l and -p switches):

 

 

0:003> !finq

The finq command (finalization queue) lists all the objects that are on the finalization queue. An example is shown below:

 

 

 

0:003> !frq -stat

The frq command (f-reachable queue) on the other hand, lists all objects that are on the f-reachable queue as shown below:

 

// 200b220 代表线程等待,可能是锁,或者 Sleep(), 这个要进一步检查。

0:046> !threadsThreadCount: 54UnstartedThread: 0BackgroundThread: 22PendingThread: 0DeadThread: 9Hosted Runtime: no PreEmptive Lock ID OSID ThreadOBJ State GC GC Alloc Context Domain Count APT Exception 9 1 1644 0000000001412de0 8220 Enabled 0000000000000000:0000000000000000 0000000000311a20 0 Ukn 17 2 528 000000000141f5d0 b220 Enabled 0000000000000000:0000000000000000 0000000000311a20 0 MTA (Finalizer) 19 4 181c 00000000039853e0 100a220 Enabled 0000000000000000:0000000000000000 0000000000311a20 0 MTA (Threadpool Worker) 20 5 221c 0000000003998d00 1220 Enabled 0000000000000000:0000000000000000 0000000000311a20 0 Ukn 21 6 16d8 00000000044484c0 200b220 Enabled 0000000000000000:0000000000000000 00000000039980a0 0 MTA 22 7 1e54 0000000004460680 200b220 Enabled 0000000000000000:0000000000000000 00000000039980a0 0 MTA 23 8 1308 000000000445fd20 200b220 Enabled 0000000000000000:0000000000000000 00000000039980a0 0 MTAXXXX 9 00000000044b0510 1019820 Enabled 0000000000000000:0000000000000000 0000000000311a20 0 MTA (Threadpool Worker) 25 a 1e50 00000000044e0e80 200b020 Enabled 0000000000000000:0000000000000000 00000000039980a0 0 MTA 26 b 204c 000000000450b110 200b220 Enabled 0000000000000000:0000000000000000 00000000039980a0 0 MTA

 

0:000> !ThreadState 3009220 Legal to Join Background CLR Owns In Multi Threaded Apartment Thread Pool Worker Thread Interruptible0:000> !ThreadState 200b220 Legal to Join Background CLR Owns CoInitialized In Multi Threaded Apartment Interruptible0:000> !ThreadState 8009220 Legal to Join Background CLR Owns In Multi Threaded Apartment Completion Port Thread

// threadstate详细: http://www.parallelfun.com/2012_11_01_archive.html

 0:050> !syncblkIndex SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 57 000000000456f9e8 1 1 0000000004567c30 1c98 46 00000001800b6e90 System.ObjectWaiting threads: 141 00000000045702a8 1 1 0000000004567c30 1c98 46 00000001800b6f70 ProtoBufV2.Meta.BasicListWaiting threads:-----------------------------Total 152CCW 3RCW 2ComClassFactory 0Free 64

// 46号托管线程拥有一个Monitor, MonitorHeld 的计算方法:(MonitorHeld-1)/2 个线程等待 46号线程。// 例如: 线程91 的 MonitorHeld 是39,则:(39-1)/2=19 表示有19个线程等待线程91// 这里的MonitorHeld按msdn的解释,拿锁的线程为1,等锁的线程为2; Monitorheld的值是偶数,也说明已经没有线程拿住锁了。 /*Sync Block 的信息:通过!syncblk 索引值 可以显示Sync Block的信息,主要有如下信息Index: Sync Block Table中的Index值Sync Block: Sync Block的地址MonitorHeld: numbers of monitor heldRecursion: 该线程获取该sync block的次数Owning thread info : 总共有三个值,第一个值是线程的数据结构地址,第二个是线程的系统线程ID,第三个值为线程的托管线程IDSyncBlock Owner:指向拥有该SyncBlock的对象的内存地址,也就是Object的地址 如果有第二个值指这个synblock第二个Held的类型统计信息:Total    152   (sync block table的总的sync Lock数量)CCW    3     (CCW(COM Callable Wrappers)对象拥有的sync block 数量)RCW    2       (RCW(Runtime Callable Wrappers )对象拥有的sync block 数量)ComClassFactory 0Free 64 Sync block table 剩余的空索引的数量

*/

/*

http://blogs.msdn.com/b/oldnewthing/archive/2006/12/12/1266392.aspx

!syncblock 详细解释和 !critsec 使用http://blogs.msdn.com/b/tess/archive/2006/01/09/a-hang-scenario-locks-and-critical-sections.aspx*/

0:044> !syncblkIndex SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 2193 000000000598fe18 5 1 000000000a4650e0 3038 110 00000001bff69770 System.ObjectWaiting threads: 90 121 2616 000000000577db08 133 0 0000000000000000 none 000000011fc6aa30 System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[[System.Reflection.RuntimeMethodInfo, mscorlib]]Waiting threads: 39 40 42 48 49 52 53 58 60 63 65 67 69 73 75 76 77 79 81 82 83 85 86 87 88 93 94 95 97 99 100 104 105 107 108 109 110 111 112 114 115 117 120 122 123 124 128 129 132 133 134 135 136 2910 000000000577bae8 3 1 000000000a5821b0 134bc 78 000000019fc88170 System.ObjectWaiting threads: 64-----------------------------Total 3256CCW 3RCW 2ComClassFactory 1Free 2992

//如果知道临界区的地址,可以用一下命令,如果不知道地址,可以用!locks

0:044> !critsec 000000011fc6aa30DebugInfo for CritSec at 000000011fc6aa30 does not point back to the critical sectionNOT an initialized critical section.CritSec +1fc6aa30 at 000000011fc6aa30WaiterWoken YesLockCount -1RecursionCount 0OwningThread 0EntryCount fef56b35ContentionCount 2000007*** Locked

// !locks 的输出// http://msdn.microsoft.com/en-us/library/windows/hardware/ff541979(v=vs.85).aspx

0:105> !locksCritSec +1192340 at 0000000001192340WaiterWoken NoLockCount 0RecursionCount 1OwningThread bad0EntryCount 0ContentionCount 46a*** Locked

//直接切换到进程上去:

0:014> ~~[bad0]s

//或者用 ~ 列出所有线程,然后切过去//参考:http://blogs.msdn.com/b/tess/archive/2006/01/09/a-hang-scenario-locks-and-critical-sections.aspx

 

0:105> ~# 0 Id: d9e0.a700 Suspend: 0 Teb: 000007ff`fffde000 Unfrozen 1 Id: d9e0.18bac Suspend: 0 Teb: 000007ff`fffdc000 Unfrozen 2 Id: d9e0.bfa0 Suspend: 0 Teb: 000007ff`fffd7000 Unfrozen 3 Id: d9e0.bad0 Suspend: 0 Teb: 000007ff`fffd3000 Unfrozen 4 Id: d9e0.16364 Suspend: 0 Teb: 000007ff`fff9e000 Unfrozen0:014> ~3s 

//

 0:046> .shell -i - -ci "~*e !clrstack" FIND /i "Monitor.Enter"0000000002f7d428 0000000076f6171a [HelperMethodFrame: 0000000002f7d428] System.Threading.Monitor.Enter(System.Object)00000000049ad3e8 0000000076f6171a [HelperMethodFrame: 00000000049ad3e8] System.Threading.Monitor.Enter(System.Object)0000000016a6d898 000007fef76500b9 [HelperMethodFrame: 0000000016a6d898] System.Threading.Monitor.Enter(System.Object)0000000016b6e8b8 000007fef76500b7 [HelperMethodFrame: 0000000016b6e8b8] System.Threading.Monitor.Enter(System.Object).shell: Process exited0:046> .shell -i - -ci "~*e !clrstack" FIND /i "Monitor.TryEnter".shell: Process exited0:046> .shell -i - -ci "~*e !clrstack" FIND /i "Monitor"000000000433eae8 0000000076f6186a [HelperMethodFrame_1OBJ: 000000000433eae8] System.Threading.Monitor.ObjWait(Boolean, Int32, System.Object)000000000504e3b8 0000000076f6186a [HelperMethodFrame_1OBJ: 000000000504e3b8] System.Threading.Monitor.ObjWait(Boolean, Int32, System.Object)000000000504e4e0 000007fef663d2ae System.Threading.Monitor.Wait(System.Object)0000000002f7d428 0000000076f6171a [HelperMethodFrame: 0000000002f7d428] System.Threading.Monitor.Enter(System.Object)00000000049ad3e8 0000000076f6171a [HelperMethodFrame: 00000000049ad3e8] System.Threading.Monitor.Enter(System.Object)0000000016a6d898 000007fef76500b9 [HelperMethodFrame: 0000000016a6d898] System.Threading.Monitor.Enter(System.Object)0000000016b6e8b8 000007fef76500b7 [HelperMethodFrame: 0000000016b6e8b8] System.Threading.Monitor.Enter(System.Object).shell: Process exited 

// 有时候会发现无锁定同步快或死锁,还可以用!mlocks 看看

0:164> !dlkExamining SyncBlocks...Scanning for ReaderWriterLock instances...Scanning for holders of ReaderWriterLock locks...Scanning for ReaderWriterLockSlim instances...Scanning for holders of ReaderWriterLockSlim locks...Examining CriticalSections...Scanning for threads waiting on SyncBlocks...Scanning for threads waiting on ReaderWriterLock locks...Scanning for threads waiting on ReaderWriterLocksSlim locks...Scanning for threads waiting on CriticalSections...No deadlocks detected.0:164> !mlocksExamining SyncBlocks...Scanning for ReaderWriterLock instances...Scanning for holders of ReaderWriterLock locks...Scanning for ReaderWriterLockSlim instances...Scanning for holders of ReaderWriterLockSlim locks...Examining CriticalSections...ClrThread DbgThread OsThread LockType Lock LockLevel------------------------------------------------------------------------------0x67 116 0x1e8 thinlock 000000014036a2b0 (recursion:0)0xab 182 0x268 thinlock 00000001c0724188 (recursion:0) 0xa4 177 0x14cc RWLockSlim 000000013ff0a358 Writer 0:164> !rwlock 000000013ff0a358WriteLockOwnerThread: 0xa4UpgradableReadLockOwnerThread: NoneReaderCount: 0ReaderThreadIds: NoneWaitingReaderCount: 204WaitingReaderThreadIds: 0x9,0xa,0x11,0x12,0x13,0x14,0x15,0x16,0x17WaitingWriterCount: 204WaitingWriterThreadIds: 0x8,0xf,0x1d,0x21,0x24,0x2b,0x2f,0x30,WaitingUpgradableReaderCount: 0WaitingUpgradableReaderThreadIds: NoneWaitingWriterUpgradeCount: 0WaitingWriterUpgradeThreadIds: None ClrThread DbgThread OsThread LockType Lock LockLevel------------------------------------------------------------------------------0x15 19 0x15e8 thinlock 00000000010b6130 (recursion:0)0x16c 226 0x1a1c SyncBlock 0000000000c735a8 

// shell 命令:

.shell -ci "!mlocks -d" find "Writer"

参考: http://weblogs.thinktecture.com/ingo/2006/08/who-is-blocking-that-mutex---fun-with-windbg-cdb-and-kd.html http://blogs.msdn.com/b/tess/archive/2006/01/09/a-hang-scenario-locks-and-critical-sections.aspx http://hi.baidu.com/ju_feng/item/e22f06974dafe530326eeb64 http://stackoverflow.com/questions/22037581/determining-which-method-is-holding-a-readerwriterlockslim-writelock

windbg .net 程序的死锁检测 常用方法(个人备份笔记)

标签:

小编还为您整理了以下内容,可能对您也有帮助:

蓝屏代码

代码 含意

0 0x0000 作业完成。

1 0x0001 不正确的函数。

2 0x0002 系统找不到指定的档案。

3 0x0003 系统找不到指定的路径。

4 0x0004 系统无法开启档案。

5 0x0005 拒绝存取。

6 0x0006 无效的代码。

7 0x0007 储存体控制区块已毁。

8 0x0008 储存体空间不足,无法处理这个指令。

9 0x0009 储存体控制区块地址无效。

10 0x000A 环境不正确。

11 0x000B 尝试加载一个格式错误的程序。

12 0x000C 存取码错误。

13 0x000D 资料错误。

14 0x000E 储存体空间不够,无法完成这项作业。

15 0x000F 系统找不到指定的磁盘驱动器。

16 0x0010 无法移除目录。

16 0x0010 无法移除目录。

17 0x0011 系统无法将档案移到 其它的磁盘驱动器。

18 0x0012 没有任何档案。

19 0x0013 储存媒体为写保护状态。

20 0x0014 系统找不到指定的装置。

21 0x0015 装置尚未就绪。

22 0x0016 装置无法识别指令。

23 0x0017 资料错误 (cyclic rendancy check)

24 0x0018 程序发出一个长度错误的指令。

25 0x0019 磁盘驱动器在磁盘找不到 持定的扇区或磁道。

26 0x001A 指定的磁盘或磁盘无法存取。

27 0x001B 磁盘驱动器找不到要求的扇区。

28 0x001C 打印机没有纸。

29 0x001D 系统无法将资料写入指定的磁盘驱动器。

30 0x001E 系统无法读取指定的装置。

31 0x001F 连接到系统的某个装置没有作用。

32 0x0020 The process cannot access the file because it is being

used by another process.

33 0x0021 档案的一部份被锁定, 现在无法存取。

34 0x0022 磁盘驱动器的磁盘不正确。 请将 %2 (Volume Serial

Number: %3) 插入磁盘机%1。

36 0x0024 开启的分享档案数量太多。

38 0x0026 到达档案结尾。

39 0x0027 磁盘已满。

50 0x0032 不支持这种网络要求。

51 0x0033 远程计算机无法使用。

52 0x0034 网络名称重复。

53 0x0035 网络路径找不到。

54 0x0036 网络忙碌中。

55 0x0037 The specified network resource or device is no longer

available.

56 0x0038 The network BIOS command limit has been reached. 57

0x0039 网络配接卡发生问题。

58 0x003A 指定的服务器无法执行要求的作业。

59 0x003B 网络发生意外错误。

60 0x003C 远程配接卡不兼容。

61 0x003D 打印机队列已满。

62 0x003E 服务器的空间无法储存等候打印的档案。

63 0x003F 等候打印的档案已经删除。

64 0x0040 指定的网络名称无法使用。

65 0x0041 拒绝存取网络。

65 0x0041 拒绝存取网络。

66 0x0042 网络资源类型错误。

67 0x0043 网络名称找不到。

68 0x0044 超过区域计算机网络配接卡的名称。

69 0x0045 超过网络 BIOS 作业阶段的。

70 0x0046 远程服务器已经暂停或者正在起始中。

71 0x0047 由于联机数目已达上限,此时无法再联机到这台远程计算机。

72 0x0048 指定的打印机或磁盘装置已经暂停作用。

80 0x0050 档案已经存在。

82 0x0052 无法建立目录或档案。

83 0x0053 INT 2484 0x0054 处理这项要求的储存体无法使用。

85 0x0055 近端装置名称已经在使用中。

86 0x0056 指定的网络密码错误。

87 0x0057 参数错误。

88 0x0058 网络发生资料写入错误。

89 0x0059 此时系统无法执行其它行程。

100 0x0064 无法建立其它的系统 semaphore。

101 0x0065 属于其它行程专用的 semaphore.

102 0x0066 semaphore 已经设定,而且无法关闭。

103 0x0067 无法指定 semaphore 。

104 0x0068 在岔断时间无法要求专用的 semaphore 。

104 0x0068 在岔断时间无法要求专用的 semaphore 。

105 0x0069 此 semaphore 先前的拥有权已经结束。

106 0x006A 请将磁盘插入 %1。

107 0x006B 因为代用的磁盘尚未插入,所以程序已经停止。

108 0x006C 磁盘正在使用中或被锁定。

109 0x006D Pipe 已经中止。

110 0x006E 系统无法开启指定的 装置或档案。

111 0x006F 档名太长。

112 0x0070 磁盘空间不足。

113 0x0071 没有可用的内部档案标识符。

114 0x0072 目标内部档案标识符不正确。

117 0x0075 由应用程序所执行的 IOCTL 呼叫 不正确。

118 0x0076 写入验证参数值不正确。

119 0x0077 系统不支持所要求的指令。

120 0x0078 此项功能仅在 Win32 模式有效。

121 0x0079 semaphore 超过逾时期间。

122 0x007A 传到系统呼叫的资料区域 太小。

123 0x007B 文件名、目录名称或储存体卷标语法错误。

124 0x007C 系统呼叫层次不正确。

125 0x007D 磁盘没有设定卷标。

126 0x007E 找不到指定的模块。

127 0x007F 找不到指定的程序。

128 0x0080 没有子行程可供等待。

128 0x0080 没有子行程可供等待。

129 0x0081 %1 这个应用程序无法在 Win32 模式下执行。

130 0x0082 Attempt to use a file handle to an open disk partition for an operation other than raw disk I/O.

131 0x0083 尝试将档案指针移至档案开头之前。

132 0x0084 无法在指定的装置或档案,设定档案指针。

133 0x0085 JOIN 或 SUBST 指令 无法用于 内含事先结合过的磁盘驱动器。

134 0x0086 尝试在已经结合的磁盘驱动器,使用 JOIN 或 SUBST 指令。

135 0x0087 尝试在已经替换的磁盘驱动器,使 用 JOIN 或 SUBST 指令。

136 0x0088 系统尝试删除 未连结过的磁盘驱动器的连结关系。

138 0x008A 系统尝试将磁盘驱动器结合到已经结合过之磁盘驱动器的目录。

139 0x008B 系统尝试将磁盘驱动器替换成已经替换过之磁盘驱动器的目录。

140 0x008C 系统尝试将磁盘驱动器替换成已经替换过之磁盘驱动器的目录。

141 0x00 系统尝试将磁盘驱动器 SUBST 成已结合的磁盘驱动器 目录。

142 0x008E 系统此刻无法执行 JOIN 或 SUBST。

143 0x008F 系统无法将磁盘驱动器结合或替换同一磁盘驱动器下目录。

144 0x0090 这个目录不是根目录的子目录。

145 0x0091 目录仍有资料。

146 0x0092 指定的路径已经被替换过。

147 0x0093 资源不足,无法处理这项 指令。

148 0x0094 指定的路径这时候无法使用。

148 0x0094 指定的路径这时候无法使用。

149 0x0095 尝试要结合或替换的磁盘驱动器目录,是已经替换过的的目标。

150 0x0096 CONFIG.SYS 文件未指定系统追踪信息,或是追踪功能被取消。

151 0x0097 指定的 semaphore事件 DosMuxSemWait 数目不正确。

152 0x0098 DosMuxSemWait 没有执行;设定太多的 semaphore。

153 0x0099 DosMuxSemWait 清单不正确。

154 0x009A 您所输入的储存媒体标 元长度。

155 0x009B 无法建立其它的执行绪。

156 0x009C 接收行程拒绝接受信号。

157 0x009D 区段已经被舍弃,无法被锁定。

158 0x009E 区段已经解除锁定。

159 0x009F 执行绪识别码的地址不正确。

160 0x00A0 传到 DosExecPgm 的自变量字符串不正确。

161 0x00A1 指定的路径不正确。

162 0x00A2 信号等候处理。

164 0x00A4 系统无法建立执行绪。

167 0x00A7 无法锁定档案的部份范围。

170 0x00AA 所要求的资源正在使用中。

173 0x00AD 取消范围的锁定要求不明显。

174 0x00AE 档案系统不支持自动变更锁定类型。

180 0x00B4 系统发现不正确的区段号码。

182 0x00B6 操作系统无法执行 %1。

182 0x00B6 操作系统无法执行 %1。

183 0x00B7 档案已存在,无法建立同一档案。

186 0x00BA 传送的旗号错误。

187 0x00BB 指定的系统旗号找不到。

188 0x00BC 操作系统无法执行 %1。

189 0x00BD 操作系统无法执行 %1。

190 0x00BE 操作系统无法执行 %1。

191 0x00BF 无法在 Win32 模式下执行 %1。

192 0x00C0 操作系统无法执行 %1。

193 0x00C1 %1 不是正确的 Win32 应用程序。

194 0x00C2 操作系统无法执行 %1。

195 0x00C3 操作系统无法执行 %1。

196 0x00C4 操作系统无法执行 这个应用程序。

197 0x00C5 操作系统目前无法执行 这个应用程序。

198 0x00C6 操作系统无法执行 %1。

199 0x00C7 操作系统无法执行 这个应用程序。

200 0x00C8 程序代码的区段不可以大于或等于 64KB。

201 0x00C9 操作系统无法执行 %1。

202 0x00CA 操作系统无法执行 %1。

203 0x00CB 系统找不到输入的环境选项。\r

205 0x00CD 在指令子目录下,没有任何行程有信号副处理程序。

206 0x00CE 文件名称或扩展名太长。

207 0x00CF ring 2 堆栈使用中。

207 0x00CF ring 2 堆栈使用中。

208 0x00D0 输入的通用档名字元 * 或 ? 不正确, 或指定太多的通用档名字元。

209 0x00D1 所传送的信号不正确。

210 0x00D2 无法设定信号处理程序。

212 0x00D4 区段被锁定,而且无法重新配置。

214 0x00D6 附加到此程序或动态连结模块的动态连结模块太多。

215 0x00D7 Can’t nest calls to LoadMole.

230 0x00E6 The pipe state is invalid.

231 0x00E7 所有的 pipe instances 都在忙碌中。

232 0x00E8 The pipe is being closed.

233 0x00E9 No process is on the other end of the pipe.

234 0x00EA 有更多可用的资料。

240 0x00F0 作业阶段被取消。

254 0x00FE 指定的延伸属性名称无效。

255 0x00FF 延伸的属性不一致。

259 0x0103 没有可用的资料。

266 0x010A 无法使用 Copy API。

267 0x010B 目录名称错误。

275 0x0113 延伸属性不适用于缓冲区。

276 0x0114 在外挂的档案系统上的延伸属性档案已经毁损。

277 0x0115 延伸属性表格文件满。

278 0x0116 指定的延伸属性代码无效。

278 0x0116 指定的延伸属性代码无效。

282 0x011A 外挂的这个档案系统不支持延伸属性。

288 0x0120 意图释放不属于叫用者的 mutex。

298 0x012A semaphore 传送次数过多。

299 0x012B 只完成 Read/WriteProcessMemory 的部份要求。

317 0x013D 系统找不到位于讯息文件 %2 中编号为 0x%1 的讯息。

487 0x01E7 尝试存取无效的地址。

534 0x0216 运算结果超过 32 位。

535 0x0217 信道的另一端有一个行程在接送资料。

536 0x0218 等候行程来开启信道的另一端。

994 0x03E2 存取延伸的属性被拒。

995 0x03E3 由于执行绪结束或应用程序要求,而异常终止 I/O 作业。

996 0x03E4 重叠的 I/O 事件不是设定成通知状态。

997 0x03E5 正在处理重叠的 I/O 作业。

998 0x03E6 对内存位置的无效存取。

999 0x03E7 执行 inpage 作业发生错误。

1001 0x03E9 递归太深,堆栈满溢。

1002 0x03EA 窗口无法用来传送讯息。

1003 0x03EB 无法完成这项功能。

1004 0x03EC 旗号无效。

1005 0x03ED 储存媒体未含任何可辨识的档案系统。 请确定以加载所需

的系统驱动程序,而且该储存媒体并未毁损。

1006 0x03EE 储存该档案的外部媒体发出警告,表示该已开启档案已经无效。

1007 0x03EF 所要求的作业无法在全屏幕模式下执行。

1008 0x03F0 An attempt was made to reference a token that does

not exist.

1009 0x03F1 组态系统登录数据库毁损。

1010 0x03F2 组态系统登录机码无效。

1011 0x03F3 无法开启组态系统登录机码。

1012 0x03F4 无法读取组态系统登录机码。

1013 0x03F5 无法写入组态系统登录机码。

1014 0x03F6 系统登录数据库中的一个档案必须使用记录或其它备份还原。 已经还原成功。

1015 0x03F7 系统登录毁损。其中某个档案毁损、或者该档案的 系统映对内存内容毁损、会是档案无法复原。

1016 0x03F8 系统登录起始的 I/O 作业发生无法复原的错误。 系统登录无法读入、写出或更新,其中的一个档案 内含系统登录在内存中的内容。

1017 0x03F9 系统尝试将档案加载系统登录或将档案还原到系统登录中,但是,指定档案的格式不是系统登录文件的格式。

1018 0x03FA 尝试在标示为删除的系统登录机码,执行不合法的操作。

1018 0x03FA 尝试在标示为删除的系统登录机码,执行不合法的操作。

1019 0x03FB 系统无法配置系统登录记录所需的空间。

1020 0x03FC 无法在已经有子机码或数值的系统登录机码建立符号连结。

1021 0x03FD 无法在临时机码下建立永久的子机码。

1022 0x03FE 变更要求的通知完成,但信息 并未透过呼叫者的缓冲区传回。呼叫者现在需要自行列举档案,找出变更的地方。

1051 0x041B 停止控制已经传送给其它服务 所依峙的一个服务。

1052 0x041C 要求的控制对此服务无效

1016 0x03F8 系统登录起始的 I/O 作业发生无法复原的错误。 系统登录无法读入、写出或更新,其中的一个档案 内含系统登录在内存中的内容。

1017 0x03F9 系统尝试将档案加载系统登录或将档案还原到系统登录中,但是,指定档案的格式不是系统登录文件的格式。

1018 0x03FA 尝试在标示为删除的系统登录机码,执行不合法的操作。

1018 0x03FA 尝试在标示为删除的系统登录机码,执行不合法的操作。

1019 0x03FB 系统无法配置系统登录记录所需的空间。

1020 0x03FC 无法在已经有子机码或数值的系统登录机码建立符号连结。

1021 0x03FD 无法在临时机码下建立永久的子机码。

1022 0x03FE 变更要求的通知完成,但信息 并未透过呼叫者的缓冲区传回。呼叫者现在需要自行列举档案,找出变更的地方。

1051 0x041B 停止控制已经传送给其它服务 所依峙的一个服务。

1052 0x041C 要求的控制对此服务无效

1052 0x041C 要求的控制对此服务无效

1053 0x041D The service did not respond to the start or controlrequest in a timely fashion.

1054 0x041E 无法建立服务的执行绪。

1055 0x041F 服务数据库被锁定。

1056 0x0420 这种服务已经在执行。

1057 0x0421 帐户名称错误或者不存在。

1058 0x0422 指定的服务暂停作用,无法激活。

1059 0x0423 指定循环服务从属关系。

1060 0x0424 指定的服务不是安装进来的服务。

1061 0x0425 该服务项目此时无法接收控制讯息。

1062 0x0426 服务尚未激活。

1063 0x0427 无法联机到服务控制程序。

1064 0x0428 处理控制要求时,发生意外状况。

1065 0x0429 指定的数据库不存在。

1066 0x042A 服务传回专属于服务的错误码。

1067 0x042B The process terminated unexpectedly.

1068 0x042C 从属服务或群组无法激活。

1069 0x042D 因为登入失败,所以没有激活服务。

1070 0x042E 在激活之后,服务在激活状态时当机。

1071 0x042F 指定服务数据库锁定无效。

1072 0x0430 指定的服务已经标示为删除。

1073 0x0431 指定的服务已经存在。

1074 0x0432 系统目前正以上一次执行成功的组态执行。

1075 0x0433 从属服务不存在,或已经标示为删除。

1076 0x0434 目前的激活已经接受上一次执行成功的 控制设定。

1118 0x045E 序列装置起始失败,会取消加载序列驱动程序。

1119 0x045F 无法开启装置。这个装置与其它装置共享岔断要求 (IRQ)。至少已经有一个使用同一IRQ 的其它装置已经开启。

1120 0x0460 A serial I/O operation was completed by anotherwrite to the serial port. (The IOCTL_SERIAL_XOFF_COUNTER reached zero.)

1121 0x0461 因为已经过了逾时时间,所以序列 I/O 作业完成。(IOCTL_SERIAL_XOFF_COUNTER 不是零。)

1122 0x0462 在磁盘找不到任何的 ID 地址标示。

1123 0x0463 磁盘扇区 ID 字段与磁盘控制卡追踪地址 不符。

1124 0x0464 软式磁盘驱动器控制卡回报了一个软式磁盘驱动器驱动程序无法识别的错误。

1125 0x0465 软式磁盘驱动器控制卡传回与缓存器中不一致的结果。

1126 0x0466 存取硬盘失败,重试后也无法作业。

1127 0x0467 存取硬盘失败,重试后也无法作业。

1128 0x0468 存取硬盘时,必须重设磁盘控制卡,但是 连重设的动作也失败。

1129 0x0469 到了磁带的最后。

1130 0x046A 可用服务器储存空间不足,无法处理这项指令。

1131 0x046B 发现潜在的死锁条件。

1132 0x046C 指定的基本地址或档案位移没有适当 对齐。

1140 0x0474 尝试变更系统电源状态,但其它的应用程序或驱动程序拒绝。

1141 0x0475 系统 BIOS 无法变更系统电源状态。

1150 0x047E 指定的程序需要新的 Windows 版本。

1151 0x047F 指定的程序不是 Windows 或 MS-DOS 程序。

1152 0x0480 指定的程序已经激活,无法再激活一次。

1153 0x0481 指定的程序是为旧版的 Windows 所写的。

1154 0x0482 执行此应用程序所需的链接库档案之一毁损。

1155 0x0483 没有应用程序与此项作业的指定档案建立关联

1077 0x0435 上一次激活之后,就没有再激活服务。

1078 0x0436 指定的名称已经用于服务名称或服务显示 名称。

1100 0x044C 已经到了磁带的最后。

1101 0x044D 到了档案标示。

1102 0x044E 遇到磁带的开头或分割区。

1100 0x044C 已经到了磁带的最后。

1101 0x044D 到了档案标示。

1102 0x044E 遇到磁带的开头或分割区。

1103 0x044F 到了档案组的结尾。

1104 0x0450 磁带没有任何资料。

1105 0x0451 磁带无法制作分割区。

1106 0x0452 存取多重容体的新磁带时,发现目前 区块大小错误。

1107 0x0453 加载磁带时,找不到磁带分割区信息。

1108 0x0454 无法锁住储存媒体退带功能。

1108 0x0454 无法锁住储存媒体退带功能。

1109 0x0455 无法解除加载储存媒体。

1110 0x0456 磁盘驱动器中的储存媒体已经变更。

1111 0x0457 已经重设 I/O 总线。

1112 0x0458 磁盘驱动器没有任何储存媒体。

1113 0x0459 目标 multi-byte code page,没有对应 Unicode 字符。

1114 0x045A 动态链接库 (DLL) 起始例程失败。

1115 0x045B 系统正在关机。

1116 0x045C 无法中止系统关机,因为没有关机的动作在进行中。

1117 0x045D 因为 I/O 装置发生错误,所以无法执行要求。

1156 0x0484 传送指令到应用程序发生错误。

1157 0x0485 找不到执行此应用程序所需的链接库档案。

1200 0x04B0 指定的装置名称无效。

1201 0x04B1 装置现在虽然未联机,但是它是一个记忆联机。

1202 0x04B2 尝试记忆已经记住的装置。

1203 0x04B3 提供的网络路径找不到任何网络提供程序。

1203 0x04B3 提供的网络路径找不到任何网络提供程序。

1204 0x04B4 指定的网络提供程序名称错误。

1205 0x04B5 无法开启网络联机设定文件。

1206 0x04B6 网络联机设定文件坏掉。

1207 0x04B7 无法列举非容器。

1208 0x04B8 发生延伸的错误。

1209 0x04B9 指定的群组名称错误。

1210 0x04BA 指定的计算机名称错误。

1211 0x04BB 指定的事件名称错误。

1212 0x04BC 指定的网络名称错误。

1213 0x04BD 指定的服务名称错误。

1214 0x04BE 指定的网络名称错误。

1215 0x04BF 指定的资源共享名称错误。

1216 0x04C0 指定的密码错误。

1217 0x04C1 指定的讯息名称错误。

1218 0x04C2 指定的讯息目的地错误。

1219 0x04C3 所提供的条件与现有的条件组发生冲突。

1220 0x04C4 尝试与网络服务器联机,但是 与该服务器的联机已经太多。

1221 0x04C5 其它网络计算机已经在使用这个工作群组或网域名称

你下一个 GHOST XP重装一下系统就好了 现在的GHOST功能跟兼容都很好的 推荐电脑公司或是雨林木风 这两个版本的!

是否可以解决您的问题?

如何手工抓取dump文件

在生产环境下进行故障诊断时,为了不终止正在运行的服务或应用程序,有两种方式可以对正在运行的服务或应用程序的进程进行分析和调试。
首先一种比较直观简洁的方式就是用WinDbg等调试器直接attach到需要调试的进程,调试完毕之后再detach即可。但是这种方式有个缺点就是执行debugger命令时必须先break这个进程,执行完debug命令之后又得赶紧F5让他继续运行,因为被你break住的时候意味着整个进程也已经被你挂起。另外也经常会由于First Chance Excetpion而自动break,你得时刻留意避免长时间break整个进程。所以这样的调试方式对时间是个很大的考验,往往没有充裕的时间来做仔细分析。
另一种方式则是在出现问题的时候,比如CPU持续长时间100%,内存突然暴涨等非正常情况下,通过对服务进程snapshot抓取一个mp文件,完成mp之后先deatch,让进程继续运行。然后用windbg等工具来分析这个抓取到的mp文件。
那么如何在不终止进程的情况下抓取mp文件呢?Debugging Tools for Windows里提供了一个非常好的工具,adplus.vbs。从名字可以看出,实际上是一个vb脚本,只是对cdb调试器作的一个包装脚本。
其路径与Debugging Tools for Windows的安装路径相同,使用的方法也很简单,如下所示:
adplus.vbs -hang -p 1234 -o d:/mp
其中-hang指明使用hang模式,亦即在进程运行过程中附加上去snapshot抓取一个mp文件,完成之后detach。与之对应的是-crash崩溃模式,用户先启动adplus,然后由它启动要监控的程序,在出现异常崩溃时自动生成mp文件,或者通过Ctrl-C人为发出抓取指令。但是-crash模式在抓取完成之后,被监控的进程就必须终止。因此我们在这里只选用-hang模式。
-p是要调试的进程ID,比如ASP.NET应用线程池,在Win2003下就是w3wp.exe
-o 指定要output的mp文件路径。
另外,与adplus类似的,有个UserDump工具,但是抓取用户模式的进程,而adplus则是内核模式和用户模式两者皆可。
而总所周至的Dr. Waston,则会在进程崩溃之后的自动时候抓取mp文件,一样可以用于windbg等调试器来事后分析程序崩溃时的状态。
====================
0:000> !mpheap -stat
No export mpheap found
======解决方法:
.load clr20/sos.dll,你要先执行的。sos.dll在默认的c:/windows/microsoft.net/framework/v2.....下面,你复制到c:/program files/debugging tools for windows下面的clr20目录下面(clr20是你手工创建的)
=======================

在.NET下开发时,最基本的调试方法就是使用Visual Studio的单步调试。但是对于一些特殊情况,特别是涉及到CLR内部的时候使用这种方式就达不到目的了。
如果要查看运行时内存使用情况,IL代码,CLR信息等可以使用以下两种方式:
1、使用VS2005 + sos.dll
2、使用Windbg + sos.dll
第二种方式功能更加强大,下面我就通过实际操作展示一下怎么使用这种方法得到运行时ArrayList内部的值。
有人可能会说:我直接用Visual Studio的单步调试岂不是更快?当然,这个只是一个演示,通过这个演示是为以后的高级调试打下基础

在操作之前,先熟悉一下基本知识:
A、使用VS2005 + sos.dll调试
1、需要在项目->属性->调试-〉启用非托管代码调试
2、打开调试-〉窗口-〉即时
3、在即时窗口中输入 !load sos 加载调试模块
4、输入其它调试语句

B、使用Windbg + sos.dll
1、去微软的网站下载最新的Windbg
2、打开Windbg在File-〉Symbol File Path ...窗口中输入 srv*c:/symbols*http://msdl.microsoft.com/download/symbols
3、运行需要调试的程序,然后在Windbg中File-〉Attach to Process中选择刚才运行的程序
4、在出现的Command窗口中就可以输入调试语句
5、常用调试语句:
lm //查看加载了哪些模块
.load C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/sos.dll //加载调试模块
ld TestClass //加载调试符号
!name2ee TestClass.exe TestClass.Program.test //显示test方法相关的地址
!mpmt -md 00976d48 //得到类的成员函数详细信息
!mpil 00973028 // 显示这个方法被编译器编译之后的IL代码
!mpheap -stat //该命令显示程序中所有对象的统计信息,显示的大小是对象本身的大小,不包括对象里面值的大小
!mpheap -mt 790fcb30 //该命令显示MethodTable 790fcb30的详细信息
!gcroot 012919b8 //来显示一个实例的所属关系
!mpobj(do) 012a3904 //显示一个对象的具体内容,看对象里面有什么,值是什么
!ObjSize 012a1ba4 //对象实际在内存中的大小
!eeheap -gc //查看托管堆的情况(包括大小)
!DumpArray //查看数组信息
下面就来看看具体的调试步骤:
1、我们的测试代码

namespace TestClass
{
class Program
{
[STAThread]
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add("aaaa");
list.Add("bbbb");
Console.ReadLine();
}
}
}很简单,就是一个ArrayList

运行这个程序(开始执行,不调试),然后进入Windbg,Attach到这个进程

2、查看所有堆栈信息
0:004> !mpheap -stat
MT Count TotalSize Class Name
7910062c 1 12 System.Security.Permissions.SecurityPermission
7918e284 1 16 System.IO.TextReader+SyncTextReader
79102d10 1 20 Microsoft.Win32.SafeHandles.SafeFileMappingHandle
79102cb4 1 20 Microsoft.Win32.SafeHandles.SafeViewOfFileHandle
79101d30 1 20 System.Text.InternalEncoderBestFitFallback
79100a7c 1 20 Microsoft.Win32.SafeHandles.SafeFileHandle
79105cd4 1 24 System.Collections.ArrayList
......
7912ad90 11 9036 System.Object[]
790fcb30 2083 131492 System.String
Total 2202 objects
除了我们的ArrayList外,还有很多其它的系统信息,先不用管它

3、查看我们的ArrayList的信息
0:004> !mpheap -mt 79105cd4
Address MT Size
012a1b88 79105cd4 24
total 1 objects
Statistics:
MT Count TotalSize Class Name
79105cd4 1 24 System.Collections.ArrayList
Total 1 objects

4、查看对应地址内部实际的值
0:004> !do 012a1b88
Name: System.Collections.ArrayList
MethodTable: 79105cd4
EEClass: 79105c28
Size: 24(0x18) bytes
(C:/WINDOWS/assembly/GAC_32/mscorlib/2.0.0.0__b77a5c561934e089/mscorlib.dll)
Fields:
MT Field Offset Type VT Attr Value Name
7912ad90 40008df 4 System.Object[] 0 instance 012a1bb0 _items
791018e0 40008e0 c System.Int32 1 instance 2 _size
791018e0 40008e1 10 System.Int32 1 instance 2 _version
790fc35c 40008e2 8 System.Object 0 instance 00000000 _syncRoot
7912ad90 40008e3 1c0 System.Object[] 0 shared static emptyArray
>> Domain:Value 00149c58:012a1ba0 <<
可以看到ArrayList的大小为2,具体的值保存在地址012a1bb0中,是一个System.Object[]类型的数组

5、查看数组信息
0:004> !DumpArray 012a1bb0
Name: System.Object[]
MethodTable: 7912ad90
EEClass: 7912b304
Size: 32(0x20) bytes
Array: Rank 1, Number of elements 4, Type CLASS
Element Methodtable: 790fc35c
[0] 012a1b50
[1] 012a1b6c
[2] null
[3] null

6、查看数组内对象的值
0:004> !do 012a1b50
Name: System.String
MethodTable: 790fcb30
EEClass: 790fca90
Size: 26(0x1a) bytes
(C:/WINDOWS/assembly/GAC_32/mscorlib/2.0.0.0__b77a5c561934e089/mscorlib.dll)
String: aaaa
Fields:
MT Field Offset Type VT Attr Value Name
791018e0 4000096 4 System.Int32 1 instance 5 m_arrayLength
791018e0 4000097 8 System.Int32 1 instance 4 m_stringLength
790fe534 4000098 c System.Char 1 instance 61 m_firstChar
790fcb30 4000099 10 System.String 0 shared static Empty
>> Domain:Value 00149c58:790d81bc <<
7912b1d8 400009a 14 System.Char[] 0 shared static WhitespaceChars
>> Domain:Value 00149c58:012a16f0 <<
====================
windbg使用小总结
【抓mp】
1、一般抓法
adplus -hang -p 3230 -quiet 抓3230 pid进程,hang模式,相当于把那个进程暂停住,取内存快照
adplus -crash -pn w3wp -quiet 抓w3wp进程,crash模式,当那个进程崩溃结束的时候自动抓取当时的内存
adplus -hang -iis -quiet 抓IIS相关进程,包括其上host的web应用,以及iis自身
2、抓window服务
http://support.microsoft.com/kb/824344/zh-cn
3、远程抓
http://blog.joycode.com/tingwang/archive/2006/08/11/79763.aspx
4、抓蓝屏和死机的mp
电脑无故重启或者蓝屏会在C:/WINDOWS/Minimp/下保存一个minimp,但是这个minimp可用的命令很少,一般只打!analyze –v看到是哪个进程引起的,还有相关的驱动模块就基本定位问题了。
5、IIS回收的时候抓
http://blog.yesky.com/blog/omakey/archive/2006/12/17/1618015.html
6、计划任务抓
比如一个进程起来后不知道它什么时候会意外崩溃,可以在计划任务里用crash里抓,当那个进程意外终止的时候,cdb可以直接附加上去,抓取当时的mp,如果要抓一些会自动重启的进程,而且要抓每次重启前的mp,可以参考附录里一节。
【常用命令】
1、先path C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727,把.net路径设置为path环境变量,一遍在windbg里可以直接.load sos,而不必.load C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/sos.dll
2、ld demo,加载你程序的pdb文件,调试.net程序一般要把kernel32和mscorwks的符号加载上,关于这两个东西大家可以查资料,尤其是后者有哪些函数可以多了解一些。
3、在windbg的file/symbol file path对话框里输入以下文字,以便自动加载和下载符号
C:/WINDOWS/Symbols;d:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/symbols;.sympath SRV*d:/localsymbols*http://msdl.microsoft.com/download/symbols
其中有windows、.net2.0和自动从网上下载的调试符号,注意根据自己的情况适当修改目录
【调试死锁】
1、!syncblk,查看哪些线程拿到了锁
2、~67e!clrstack 跳到某个拿到锁的线程看它正在干什么操作,迟迟不肯释放锁
3、!runaway 查看这个占有锁的线程运行了多长时间。
4、~*e!clrstack查看所有线程的托管堆栈,看看哪些是正在等待锁的,比如hang在System.Threading.Monitor.Enter(System.Object)
5、~136s选择该线程,显示如下
0:000> ~136s eax=00005763 ebx=08deeb5c ecx=03eff0d4 edx=5570ab69 esi=08deeb5c edi=7ffd6000 eip=7c95ed54 esp=08deeb10 ebp=08deebb8 iopl=0 nv up ei pl zr na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246 ntdll!KiFastSystemCallRet: 7c95ed54 c3 ret
找到ecx寄存器的值,复制后ctrl+f,向上查找,会找到!syncblk的地方,如下
0:000> !syncblk Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 1906 03ee4be4 5 1 03ee8f88 22c8 67 185e2ef0 System.Object 5390 052ca39c 3 1 05292b30 1dd4 49 1060d3ac System.Object 9372 0530702c 15 1 0012d3a8 1aa8 80 185e7704 System.Object 11428 03eff0d4 35 1 053b8fa8 169c 120 166acd98 System.Object 15278 0531c6b4 61 1 06bc1430 26d8 86 1a5bea88 System.Object
可以看到136线程等待的锁被120号线程占着不放(格式有点乱,凑合看),
6、有时候通过ecx寄存器找锁不是很确定,可以用~* kb来把所有线程堆栈打出来,然后根据!syncblk出来的同步快的值去搜索大概有多少个线程在等那个锁。因为同样是等待锁,可等的状态不一样,有的在Q里,有的锁已经升级,有的去尝试去拿锁了,所以不一定当时ecx寄存器指向那块内存,具体如何找到某个正在等待锁的线程等待的锁的内存地址,以及它正等待的这个锁被哪个线程拿着,我还没琢磨出规律来,但一般情况下,如果有其它同步对象的话,更难查。.net里用我上面说的几步就能查出锁的问题了。

【内存泄漏】
1、!mpheap -stat看看哪些对象个数最多,占内存最大,
2、找到某个格式比较多的对象,可以看它的方法表,然后用!mpheap -mt 66398fa4去随机找几个对象的地址
3、用!do 1e5a22bc命令去查看几个对象的状态,属性的值等,看看正常不正常
4、用!gcroot -nostacks 1e5a22bc去查看几个对象的根正常不正常,如果有些对象的根不是自己预先设计的那样,很可能被自己没想到的对象强引用了,所以GC无法回收它,就泄漏了。
【CPU百分百】
主要用几个计数器和!runaway命令,具体见以下链接
http://www.cnblogs.com/onlytianc ... 7/06/03/769307.html
【线程池耗尽】
!threadpool 能看到完成端口,线程池工作线程和timer回调各占线程池的情况。
【其它】
1、!eestack -short -ee查看所有重要(获取锁的,托管的,停止并允许回收的)线程的mpstack,差不多相当于~*e!mpstack
2、.time 可以看到进程跑了多少时间
3、!dso 查看当前线程里有哪些对象,分析内存泄漏问题也许会用到

如何手工抓取dump文件

在生产环境下进行故障诊断时,为了不终止正在运行的服务或应用程序,有两种方式可以对正在运行的服务或应用程序的进程进行分析和调试。
首先一种比较直观简洁的方式就是用WinDbg等调试器直接attach到需要调试的进程,调试完毕之后再detach即可。但是这种方式有个缺点就是执行debugger命令时必须先break这个进程,执行完debug命令之后又得赶紧F5让他继续运行,因为被你break住的时候意味着整个进程也已经被你挂起。另外也经常会由于First Chance Excetpion而自动break,你得时刻留意避免长时间break整个进程。所以这样的调试方式对时间是个很大的考验,往往没有充裕的时间来做仔细分析。
另一种方式则是在出现问题的时候,比如CPU持续长时间100%,内存突然暴涨等非正常情况下,通过对服务进程snapshot抓取一个mp文件,完成mp之后先deatch,让进程继续运行。然后用windbg等工具来分析这个抓取到的mp文件。
那么如何在不终止进程的情况下抓取mp文件呢?Debugging Tools for Windows里提供了一个非常好的工具,adplus.vbs。从名字可以看出,实际上是一个vb脚本,只是对cdb调试器作的一个包装脚本。
其路径与Debugging Tools for Windows的安装路径相同,使用的方法也很简单,如下所示:
adplus.vbs -hang -p 1234 -o d:/mp
其中-hang指明使用hang模式,亦即在进程运行过程中附加上去snapshot抓取一个mp文件,完成之后detach。与之对应的是-crash崩溃模式,用户先启动adplus,然后由它启动要监控的程序,在出现异常崩溃时自动生成mp文件,或者通过Ctrl-C人为发出抓取指令。但是-crash模式在抓取完成之后,被监控的进程就必须终止。因此我们在这里只选用-hang模式。
-p是要调试的进程ID,比如ASP.NET应用线程池,在Win2003下就是w3wp.exe
-o 指定要output的mp文件路径。
另外,与adplus类似的,有个UserDump工具,但是抓取用户模式的进程,而adplus则是内核模式和用户模式两者皆可。
而总所周至的Dr. Waston,则会在进程崩溃之后的自动时候抓取mp文件,一样可以用于windbg等调试器来事后分析程序崩溃时的状态。
====================
0:000> !mpheap -stat
No export mpheap found
======解决方法:
.load clr20/sos.dll,你要先执行的。sos.dll在默认的c:/windows/microsoft.net/framework/v2.....下面,你复制到c:/program files/debugging tools for windows下面的clr20目录下面(clr20是你手工创建的)
=======================

在.NET下开发时,最基本的调试方法就是使用Visual Studio的单步调试。但是对于一些特殊情况,特别是涉及到CLR内部的时候使用这种方式就达不到目的了。
如果要查看运行时内存使用情况,IL代码,CLR信息等可以使用以下两种方式:
1、使用VS2005 + sos.dll
2、使用Windbg + sos.dll
第二种方式功能更加强大,下面我就通过实际操作展示一下怎么使用这种方法得到运行时ArrayList内部的值。
有人可能会说:我直接用Visual Studio的单步调试岂不是更快?当然,这个只是一个演示,通过这个演示是为以后的高级调试打下基础

在操作之前,先熟悉一下基本知识:
A、使用VS2005 + sos.dll调试
1、需要在项目->属性->调试-〉启用非托管代码调试
2、打开调试-〉窗口-〉即时
3、在即时窗口中输入 !load sos 加载调试模块
4、输入其它调试语句

B、使用Windbg + sos.dll
1、去微软的网站下载最新的Windbg
2、打开Windbg在File-〉Symbol File Path ...窗口中输入 srv*c:/symbols*http://msdl.microsoft.com/download/symbols
3、运行需要调试的程序,然后在Windbg中File-〉Attach to Process中选择刚才运行的程序
4、在出现的Command窗口中就可以输入调试语句
5、常用调试语句:
lm //查看加载了哪些模块
.load C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/sos.dll //加载调试模块
ld TestClass //加载调试符号
!name2ee TestClass.exe TestClass.Program.test //显示test方法相关的地址
!mpmt -md 00976d48 //得到类的成员函数详细信息
!mpil 00973028 // 显示这个方法被编译器编译之后的IL代码
!mpheap -stat //该命令显示程序中所有对象的统计信息,显示的大小是对象本身的大小,不包括对象里面值的大小
!mpheap -mt 790fcb30 //该命令显示MethodTable 790fcb30的详细信息
!gcroot 012919b8 //来显示一个实例的所属关系
!mpobj(do) 012a3904 //显示一个对象的具体内容,看对象里面有什么,值是什么
!ObjSize 012a1ba4 //对象实际在内存中的大小
!eeheap -gc //查看托管堆的情况(包括大小)
!DumpArray //查看数组信息
下面就来看看具体的调试步骤:
1、我们的测试代码

namespace TestClass
{
class Program
{
[STAThread]
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add("aaaa");
list.Add("bbbb");
Console.ReadLine();
}
}
}很简单,就是一个ArrayList

运行这个程序(开始执行,不调试),然后进入Windbg,Attach到这个进程

2、查看所有堆栈信息
0:004> !mpheap -stat
MT Count TotalSize Class Name
7910062c 1 12 System.Security.Permissions.SecurityPermission
7918e284 1 16 System.IO.TextReader+SyncTextReader
79102d10 1 20 Microsoft.Win32.SafeHandles.SafeFileMappingHandle
79102cb4 1 20 Microsoft.Win32.SafeHandles.SafeViewOfFileHandle
79101d30 1 20 System.Text.InternalEncoderBestFitFallback
79100a7c 1 20 Microsoft.Win32.SafeHandles.SafeFileHandle
79105cd4 1 24 System.Collections.ArrayList
......
7912ad90 11 9036 System.Object[]
790fcb30 2083 131492 System.String
Total 2202 objects
除了我们的ArrayList外,还有很多其它的系统信息,先不用管它

3、查看我们的ArrayList的信息
0:004> !mpheap -mt 79105cd4
Address MT Size
012a1b88 79105cd4 24
total 1 objects
Statistics:
MT Count TotalSize Class Name
79105cd4 1 24 System.Collections.ArrayList
Total 1 objects

4、查看对应地址内部实际的值
0:004> !do 012a1b88
Name: System.Collections.ArrayList
MethodTable: 79105cd4
EEClass: 79105c28
Size: 24(0x18) bytes
(C:/WINDOWS/assembly/GAC_32/mscorlib/2.0.0.0__b77a5c561934e089/mscorlib.dll)
Fields:
MT Field Offset Type VT Attr Value Name
7912ad90 40008df 4 System.Object[] 0 instance 012a1bb0 _items
791018e0 40008e0 c System.Int32 1 instance 2 _size
791018e0 40008e1 10 System.Int32 1 instance 2 _version
790fc35c 40008e2 8 System.Object 0 instance 00000000 _syncRoot
7912ad90 40008e3 1c0 System.Object[] 0 shared static emptyArray
>> Domain:Value 00149c58:012a1ba0 <<
可以看到ArrayList的大小为2,具体的值保存在地址012a1bb0中,是一个System.Object[]类型的数组

5、查看数组信息
0:004> !DumpArray 012a1bb0
Name: System.Object[]
MethodTable: 7912ad90
EEClass: 7912b304
Size: 32(0x20) bytes
Array: Rank 1, Number of elements 4, Type CLASS
Element Methodtable: 790fc35c
[0] 012a1b50
[1] 012a1b6c
[2] null
[3] null

6、查看数组内对象的值
0:004> !do 012a1b50
Name: System.String
MethodTable: 790fcb30
EEClass: 790fca90
Size: 26(0x1a) bytes
(C:/WINDOWS/assembly/GAC_32/mscorlib/2.0.0.0__b77a5c561934e089/mscorlib.dll)
String: aaaa
Fields:
MT Field Offset Type VT Attr Value Name
791018e0 4000096 4 System.Int32 1 instance 5 m_arrayLength
791018e0 4000097 8 System.Int32 1 instance 4 m_stringLength
790fe534 4000098 c System.Char 1 instance 61 m_firstChar
790fcb30 4000099 10 System.String 0 shared static Empty
>> Domain:Value 00149c58:790d81bc <<
7912b1d8 400009a 14 System.Char[] 0 shared static WhitespaceChars
>> Domain:Value 00149c58:012a16f0 <<
====================
windbg使用小总结
【抓mp】
1、一般抓法
adplus -hang -p 3230 -quiet 抓3230 pid进程,hang模式,相当于把那个进程暂停住,取内存快照
adplus -crash -pn w3wp -quiet 抓w3wp进程,crash模式,当那个进程崩溃结束的时候自动抓取当时的内存
adplus -hang -iis -quiet 抓IIS相关进程,包括其上host的web应用,以及iis自身
2、抓window服务
http://support.microsoft.com/kb/824344/zh-cn
3、远程抓
http://blog.joycode.com/tingwang/archive/2006/08/11/79763.aspx
4、抓蓝屏和死机的mp
电脑无故重启或者蓝屏会在C:/WINDOWS/Minimp/下保存一个minimp,但是这个minimp可用的命令很少,一般只打!analyze –v看到是哪个进程引起的,还有相关的驱动模块就基本定位问题了。
5、IIS回收的时候抓
http://blog.yesky.com/blog/omakey/archive/2006/12/17/1618015.html
6、计划任务抓
比如一个进程起来后不知道它什么时候会意外崩溃,可以在计划任务里用crash里抓,当那个进程意外终止的时候,cdb可以直接附加上去,抓取当时的mp,如果要抓一些会自动重启的进程,而且要抓每次重启前的mp,可以参考附录里一节。
【常用命令】
1、先path C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727,把.net路径设置为path环境变量,一遍在windbg里可以直接.load sos,而不必.load C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/sos.dll
2、ld demo,加载你程序的pdb文件,调试.net程序一般要把kernel32和mscorwks的符号加载上,关于这两个东西大家可以查资料,尤其是后者有哪些函数可以多了解一些。
3、在windbg的file/symbol file path对话框里输入以下文字,以便自动加载和下载符号
C:/WINDOWS/Symbols;d:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/symbols;.sympath SRV*d:/localsymbols*http://msdl.microsoft.com/download/symbols
其中有windows、.net2.0和自动从网上下载的调试符号,注意根据自己的情况适当修改目录
【调试死锁】
1、!syncblk,查看哪些线程拿到了锁
2、~67e!clrstack 跳到某个拿到锁的线程看它正在干什么操作,迟迟不肯释放锁
3、!runaway 查看这个占有锁的线程运行了多长时间。
4、~*e!clrstack查看所有线程的托管堆栈,看看哪些是正在等待锁的,比如hang在System.Threading.Monitor.Enter(System.Object)
5、~136s选择该线程,显示如下
0:000> ~136s eax=00005763 ebx=08deeb5c ecx=03eff0d4 edx=5570ab69 esi=08deeb5c edi=7ffd6000 eip=7c95ed54 esp=08deeb10 ebp=08deebb8 iopl=0 nv up ei pl zr na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246 ntdll!KiFastSystemCallRet: 7c95ed54 c3 ret
找到ecx寄存器的值,复制后ctrl+f,向上查找,会找到!syncblk的地方,如下
0:000> !syncblk Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 1906 03ee4be4 5 1 03ee8f88 22c8 67 185e2ef0 System.Object 5390 052ca39c 3 1 05292b30 1dd4 49 1060d3ac System.Object 9372 0530702c 15 1 0012d3a8 1aa8 80 185e7704 System.Object 11428 03eff0d4 35 1 053b8fa8 169c 120 166acd98 System.Object 15278 0531c6b4 61 1 06bc1430 26d8 86 1a5bea88 System.Object
可以看到136线程等待的锁被120号线程占着不放(格式有点乱,凑合看),
6、有时候通过ecx寄存器找锁不是很确定,可以用~* kb来把所有线程堆栈打出来,然后根据!syncblk出来的同步快的值去搜索大概有多少个线程在等那个锁。因为同样是等待锁,可等的状态不一样,有的在Q里,有的锁已经升级,有的去尝试去拿锁了,所以不一定当时ecx寄存器指向那块内存,具体如何找到某个正在等待锁的线程等待的锁的内存地址,以及它正等待的这个锁被哪个线程拿着,我还没琢磨出规律来,但一般情况下,如果有其它同步对象的话,更难查。.net里用我上面说的几步就能查出锁的问题了。

【内存泄漏】
1、!mpheap -stat看看哪些对象个数最多,占内存最大,
2、找到某个格式比较多的对象,可以看它的方法表,然后用!mpheap -mt 66398fa4去随机找几个对象的地址
3、用!do 1e5a22bc命令去查看几个对象的状态,属性的值等,看看正常不正常
4、用!gcroot -nostacks 1e5a22bc去查看几个对象的根正常不正常,如果有些对象的根不是自己预先设计的那样,很可能被自己没想到的对象强引用了,所以GC无法回收它,就泄漏了。
【CPU百分百】
主要用几个计数器和!runaway命令,具体见以下链接
http://www.cnblogs.com/onlytianc ... 7/06/03/769307.html
【线程池耗尽】
!threadpool 能看到完成端口,线程池工作线程和timer回调各占线程池的情况。
【其它】
1、!eestack -short -ee查看所有重要(获取锁的,托管的,停止并允许回收的)线程的mpstack,差不多相当于~*e!mpstack
2、.time 可以看到进程跑了多少时间
3、!dso 查看当前线程里有哪些对象,分析内存泄漏问题也许会用到

我的电脑一年基本没清理过灰尘,这样好吗?

一 问: 我的电脑时不时就蓝屏,好长一段时间了,而且蓝屏的代码总是在变化,重装过系统,问题仍出现,不晓得和电脑的清洁度有关系吗。

答: 基本上没多大关系。蓝屏的主要原因取决于你硬件与软件之间的兼容性

。硬件因为不符合。组装机。或者软件安装出错、都有可能蓝屏

不能说和清灰一点关系没有。但成份很少 定期维护一下机器内部还是有必要的

二 问:

除了蓝屏之外

还有一个小问题就是软件有时会遇到问题关闭(多个软件都出现过)。

答:1.其实这不是个小问题 是个比较复杂的问题.我在最后给你写上详细的原因

2.如果你装有杀毒软件。有可能是它对一些不稳定程序控制的表现

3。软件与软件之间的冲突

三 问:怎么解决蓝屏问题啊,因为造成蓝屏原因太多,不好一一排除,而且蓝屏是随机性的。谁能帮忙解决下啊

答:

详细的分析了一下你的电脑的情况。1.主要原因应该是硬件不兼容

这就要挨个硬件排查。或更换新硬件试机

2.有可能是外界环境引起。比如。你机箱的散热不好。你机箱所放的位置。空间很小。或者有额外热量。导致硬件工作发热得不到正常散温

以下是你第二个问题 。详细觖答。请详阅:

一、应用程序没有检查内存分配失败

程序需要一块内存用以储存数据时,就需要使用操作系统提供的「功能函数」来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是「动态内存分配」,内存地址也就是编程中的「光标」。内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值「0」已不表示新启用的游标,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的「健壮性」。若应用程序没有检查这个错误,它就会按照「思维惯性」认为这个值是给它分配的可用游标,继续在之后的执行中使用这块内存。真正的0地址内存区储存的是计算机系统中最重要的「中断描述符表」,绝对不允许应用程序使用。在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即当机,而在健壮的操作系统中,如

Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。这时候,就会出现上述的「写内存」错误,并指出被引用的内存地址为「0x00000000」。内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。因此,这种分配失败多见于操作系统使用很长时间后,安装了多种应用程序(包括无意中「安装」的病毒程序),更改了大量的系统参数和系统档案之后。

二、应用程序由于自身BUG引用了不正常的内存光标

在使用动态分配的应用程序中,有时会有这样的情况出现:程序试突读写一块「应该可用」的内存,但不知为什么,这个预料中可用的光标已经失效了。有可能是「忘记了」向操作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而「没有留意」等等。注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写操作也同样会触发系统的保护机制,企图「违法」的程序唯一的下场就是被操作终止执行,回收全部资源。计算机世界的法律还是要比人类有效和严厉得多啊!像这样的情况都属于程序自身的BUG,你往往可在特定的操作顺序下重现错误。无效光标不一定总是0,因此错误提示中的内存地址也不一定为「0x00000000」,而是其它随机数字。如果系统经常有所提到的错误提示,下面的建议可能会有说明

1.检视系统中是否有木马或病毒。这类程序为了控制系统往往不负责任地修改系统,

从而导致操作系统异常。平常应加强信息安全意识,对来源不明的可执行程序绝不好奇。

2.更新操作系统,让操作系统的安装程序重新拷贝正确版本的系统档案、修正系统参数。

有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序。

3.试用新版本的应用程序。

Mode:

将虚拟内存撤换

答案:

目前为止是肯定的,也就是如在下次冷天到来时亦没再发生,就代表这是主因

追加:

如果你用

Ghost 恢复 OS 后建议 删除WINDOWS\PREFETCH目录下所有*.PF文件因为需让windows重新收集程序的物理地址

有些应用程序错误

"0x7cd64998" 指令参考的 "0x14c96730" 内存。该内存不能为 "read"推论是此原因

源由:

Win

XP的「预读取」技术

这种最佳化技术也被用到了应用软件上,系统对每一个应用软件的前几次启动情况进行分析,然后新增一个描述套用需求的虚拟「内存映像」,并把这些信息储存到

WINDOWSPREFETCH数据夹。一旦建立了映像,应用软件的装入速度大大提高。XP的预读取数据储存了最近8次系统启动或应用软件启动的信息。

后叙:

目前此方法亦是独步网络的(其码自己针对此问题查了许久),也是常见问题,原本几乎每天睡前关闭软件时一些程序都会发生...read...

现在就没发生了。

【文章二】

运行某些程序的时候,有时会出现内存错误的提示(0x后面内容有可能不一样),然后该程序就关闭。

“0x????????”指令引用的“0x????????”内存。该内存不能为“read”。

“0x????????”指令引用的“0x????????”内存,该内存不能为“written”。

不知你出现过类似这样的故障吗?

一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。

下面先说说硬件:

一般来说,内存出现问题的可能性并不大,主要方面是:内存条坏了、内存质量有问题,还有就是2个不同牌子不同容量的内存混插,也比较容易出现不兼容的情况,同时还要注意散热问题,特别是超频后。你可以使用MemTest

这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。

假如你是双内存,而且是不同品牌的内存条混插或者买了二手内存时,出现这个问题,这时,你就要检查是不是内存出问题了或者和其它硬件不兼容。

如果都没有,那就从软件方面排除故障了。

先简单说说原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在其一位置时,因为没有足够空间,就会发生溢出现象。举个例子:一个桶子只能将一斤的水,当你放入两斤的水进入时,就会溢出来。而系统则是在屏幕上表现出来。这个问题,经常出现在windows2000和XP系统上,Windows

2000/XP对硬件的要求是很苛刻的,一旦遇到资源死锁、溢出或者类似Windows

98里的非法操作,系统为保持稳定,就会出现上述情况。另外也可能是硬件设备之间的兼容性不好造成的。

下面我从几个例子给大家分析:

例一:打开IE浏览器或者没过几分钟就会出现"0x70dcf39f"指令引用的"0x00000000"内存。该内存不能为“read”。要终止程序,请单击“确定”的信息框,单击“确定”后,又出现“发生内部错误,您正在使用的其中一个窗口即将关闭”的信息框,关闭该提示信息后,IE浏览器也被关闭。解决方法:修复或升级IE浏览器,同时打上补丁。看过其中一个修复方法是,Win2000自升级,也就是Win2000升级到Win2000,其实这种方法也就是把系统还原到系统初始的状态下。比如你的IE升级到了6.0,自升级后,会被IE5.0代替。

例二:在windows

xp下双击光盘里面的“AutoRun.exe”文件,显示“0x77f745cc”指令引用的“0x00000078”内存。该内存不能为

“written”,要终止程序,请单击“确定”,而在Windows

98里运行却正常。解决方法:这可能是系统的兼容性问题,winXP的系统,右键“AutoRun.exe”文件,属性,兼容性,把“用兼容模式运行这个程序”项选择上,并选择“Windows

98/Me”。win2000如果打了SP的补丁后,只要开始,运行,输入:regsvr32

c:\winnt\apppatch\slayerui.dll。右键,属性,也会出现兼容性的选项。

例三:RealOne

Gold关闭时出现错误,以前一直使用正常,最近却在每次关闭时出现“0xffffffff”指令引用的“0xffffffff”内存。该内存不能为 “read”

的提示。解决方法:当使用的输入法为微软拼音输入法2003,并且隐藏语言栏时(不隐藏时没问题)关闭RealOne就会出现这个问题,因此在关闭RealOne

之前可以显示语言栏或者将任意其他输入法作为当前输入法来解决这个问题。

例四:我的豪杰超级解霸自从上网后就不能播放了,每次都提示

“0x060692f6”(每次变化)指令引用的“0xff000011”内存不能为“read”,终止程序请按确定。解决方法:试试重装豪杰超级解霸,如果重装后还会,到官方网站下载相应版本的补丁试试。还不行,只好换就用别的播放器试试了。

例五:双击一个游戏的快捷方式,“0x77f5cd0”指令引用“0xffffffff”内

存,该内存不能为“read” ,并且提示Client.dat程序错误。

解决方法:重装显卡的最新驱动程序,然后下载并且安装DirectX9.0。

例六:一个朋友发信息过来,我的电脑便出现了错误信息:“0x772b548f”指令引用的“0x00303033”内存,该内存不能为

“written”,然后QQ自动下线,而再打开QQ,发现了他发过来的十几条的信息。解决方法:这是对方利用QQ的BUG,发送特殊的代码,做QQ出错,只要打上补丁或升级到最新版本,就没事了。

【原因

解决方法】

1 内存条坏了 更换内存条

2 双内存不兼容 使用同品牌的内存或只要一条内存

3 内存质量问题 更换内存条

4 散热问题

加强机箱内部的散热

5 内存和主板没插好或其他硬件不兼容 重插内存或换个插槽

6 硬件有问题 更换硬盘

7 驱动问题

重装驱动,如果是新系统,应先安装主板驱动

8 软件损坏 重装软件

9 软件有BUG 打补丁或更新到最新版本

10 软件和系统不兼容

给软件打上补丁或是试试系统的兼容模式

11 软件和软件之间有冲突 如果最近安装了什么新软件,卸载了试试

12 软件要使用其他相关的软件有问题

重装相关软件,比如播放某一格式的文件时出错,可能是这个文件的解码器有问题

13 病毒问题 杀毒

14 杀毒软件与系统或软件相冲突

由于杀毒软件是进入底层监控系统的,可能与一些软件相冲突,卸载试试

15 系统本身有问题

有时候操作系统本身也会有BUG,要注意安装官方发行的更新程序,象SP的补丁,最好打上.如果还不行,重装系统,或更换其他版本的系统。

〔又一说〕

在控制面板的添加/删除程序中看看你是否安装了微软NET.Framework,如果已经安装了,可以考虑卸载它,当然如果你以后在其它程序需要NET.Framework时候,可以再重新安装。

另外,如果你用的是ATI显卡并且你用的是SP2的补丁(一些ATI的显卡驱动需要在NET.Framework正常工作的环境下)。这种情况你可以找一款不需要NET.Framework支持的ATI显卡驱动。

如果以上两种方法并不能完全解决问题,你试着用一下“IE修复”软件,并可以查查是否有病毒之类的。

〔微软NET.Framework升级到1.1版应该没问题了〕

〔还有一说〕

方法一:

微软新闻组的朋友指点:开始--运行:regsvr32

jscript.dll

开始--运行:regsvr32

vbscript.dll

不过没解决---但提供了路子-----一次运行注册所有dll

搜索查找到方法如下:

运行 输入cmd

回车在命令提示符下输入

for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s

%1

这个命令老兄你慢慢输 输入正确的话会看到飞快地滚屏 否则……否则失败就是没这效果。回车后慢慢等(需要点时间1-2分钟)

都运行完再打开看

方法二:

这是个典型问题~~~~~引起这个问题的原因很多。一般来讲就是给系统打上补丁和更换内存、给内存换个插槽这3种方法来解决。[系统补丁只要到Microsoft

Update网站在线更新就可以了]

(偶见)

造成这种问题的原因很多,不能单纯的下结论,尽量做到以下几点可能对你有帮助:

1。确保使用的是未修改过的软件(非汉化、破解版)

2。使用改软件时尽量不要运行其他软件。(这是个临时文件,可能某些软件也在使用临时文件夹,所以产生干扰)

3。把那些什么桌面工具,内存整理工具通通关掉(你至少有2个类似的工具在运行)”

处理方法:

运行regedit进入注册表,

在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks

下,应该只有一个正常的键值"{AEB6717E-7E19-11d0-97EE-00C04FD91972},

将其他的删除。

〔我个人的最后解决和看法〕

我今天尝试了多种办法,最后我发现问题出在微软的NET.Framework上面。我升级了这个软件,并打齐了补丁,短暂平安后,有出现“内存不能为read”的情况。后来我受上面文章的启发,卸载了微软的NET.Framework1.0和1.1,世界太平了。

另外:如果是打开“我的电脑”、“我的文档”等的时候出现上述情况,还有一种可能,就是你的右键菜单太臃肿了,此时只要清理右键菜单问题就解决了。

--------------------------------------------------------------------------------

〔试验的结果〕

上面的方法,最管用、最彻底的方法是这个:

运行

输入cmd 回车在命令提示符下输入

for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s

%1

【技巧】如果怕输入错误的话,可以复制这条指令,然后在命令提示框点击左上角的c:\,使用下面的“编辑-粘贴”功能就不容易输错了。在飞速滚屏完全静止之后,别着急启动其他程序,先耐心等一会儿,因为此时dll们还在找位置。直到你的指示灯不闪了再做别的。

explorer 占用100%CPU

病毒名称:
Worm.Agobot.3.su 类别: 蠕虫病毒
病毒资料: 破坏方法:

Agobot病毒变种。是一种蠕虫兼后门。

通过局域网共享和漏洞进行传播。

体内含有密码字典,如:
sistema invit,utente,benutzer,utilisateur,blowjob,child,rapeme,myhole,qwerty123,mygirl,
*-you,*you,mypass,switch,madre,
quidditch,dementor,hogwarts,buckbeak,cauldron,askaban,azkaban,gryffindor,hermine,hermione,potter,hagrid,mbledore,harry,copine,copin,mince,merde,carte,reseau,ecran,opteron,athlon,moonshine,biere,
cederom,imprimeur,souris,ordinateur,mouse,poiut,azerty,whiskey,whisky,jackdaniels
tennessee,Tennessee,washington,Washington,Texas,texas,poiuytrewq,,zxcvbnm
admin123,Administrateur,Administrator.....

运行成功后将自己拷贝到系统system32目录下,文件名为regsvr.exe和ipconfig.exe。

修改注册表:

HKLM\Software\Microsoft\Windows\CurrentVersion\Run
Generic Service Process : regsvr.exe

HKLM\Software\Microsoft\Windows\CurrentVersion
\RunServices
Generic Service Process : regsvr.exe

这样,每次开机病毒都能启动。
修改TCP/IP配置文件,屏蔽多家杀毒软件的网址。
遍历进程,结束下列进程:

AV.EXE,WINDUMP.EXE,DEBUG.EXE,FRHED.EXE,LOGVIEWER.EXE,HONEYD.EXE,LOGGER.EXE,
WINDBG.EXE,CONDOM.EXE,TEST.EXE,IISLOCKD.exe,KD.EXE,ARMKILLER,CLIENT.EXE,DUMP.EXE,
PMDUMP.EXE,FW.EXE,NETWORKACTIVSNIFFERV1.4.EXE,CRACKER.EXE,SRIN.EXE,PEDASM.EXE,
53ARCH.EXE,FPORT.EXE,BCW.EXE,APORTS.EXE,RERGCLEANR.EXE,REGCLEANER.EXE,TCPVIEW.EXE,
F-AGOBOT.EXE,HIJACKTHIS.EXE,_AVPM.EXE,
_AVPCC.EXE,_AVP32.EXE,ZONEALARM.EXE,
ZONALM2601.EXE,ZATUTOR.EXE,ZAPSETUP3001.EXE,
ZAPRO.EXE,XPF202EN.EXE......

可结束大量反病毒软件,防火墙,诊断工具。

病毒通过截获系统调用来隐藏病毒进程和病毒文件。所以可能出现有病毒症状但却找不到病毒的情况。

运行后主动连接IRC服务器。黑客通过irc方式可掌握被感染机器的几乎所有信息,利用被感染及其做任何事情。

病毒的清除法: 使用光华反病毒软件,彻底删除。
病毒演示:
病毒FAQ: Windows下的PE病毒。

开机按F8进安全模式,再删除~~~

第一:建议你先重启机子~按F8进入安全模式底下杀毒~
其次:考虑你的病毒残留在临时文件夹里面
建议如下处理
注意清空临时文件夹
您好不用担心;
既然杀毒软件能查出来就一定能杀,
如果杀不了,是因为病毒在运行;正在运行的程序不能修改或删除的。
那就建议你如下处理

另外请一定要清理一下你的临时文件夹
怎么清理临时文件夹?
http://zhidao.baidu.com/question/15818998.html?si=1
也可以使用超级兔子清理系统垃圾.更方便
这是因为有很多病毒主程序隐藏在临时文件夹里面,你杀毒的时候不能完全的删除
2007-1-18 超级兔子7.95
http://www.onlinedown.net/soft/2636.htm

explorer 占用100%CPU

病毒名称:
Worm.Agobot.3.su 类别: 蠕虫病毒
病毒资料: 破坏方法:

Agobot病毒变种。是一种蠕虫兼后门。

通过局域网共享和漏洞进行传播。

体内含有密码字典,如:
sistema invit,utente,benutzer,utilisateur,blowjob,child,rapeme,myhole,qwerty123,mygirl,
*-you,*you,mypass,switch,madre,
quidditch,dementor,hogwarts,buckbeak,cauldron,askaban,azkaban,gryffindor,hermine,hermione,potter,hagrid,mbledore,harry,copine,copin,mince,merde,carte,reseau,ecran,opteron,athlon,moonshine,biere,
cederom,imprimeur,souris,ordinateur,mouse,poiut,azerty,whiskey,whisky,jackdaniels
tennessee,Tennessee,washington,Washington,Texas,texas,poiuytrewq,,zxcvbnm
admin123,Administrateur,Administrator.....

运行成功后将自己拷贝到系统system32目录下,文件名为regsvr.exe和ipconfig.exe。

修改注册表:

HKLM\Software\Microsoft\Windows\CurrentVersion\Run
Generic Service Process : regsvr.exe

HKLM\Software\Microsoft\Windows\CurrentVersion
\RunServices
Generic Service Process : regsvr.exe

这样,每次开机病毒都能启动。
修改TCP/IP配置文件,屏蔽多家杀毒软件的网址。
遍历进程,结束下列进程:

AV.EXE,WINDUMP.EXE,DEBUG.EXE,FRHED.EXE,LOGVIEWER.EXE,HONEYD.EXE,LOGGER.EXE,
WINDBG.EXE,CONDOM.EXE,TEST.EXE,IISLOCKD.exe,KD.EXE,ARMKILLER,CLIENT.EXE,DUMP.EXE,
PMDUMP.EXE,FW.EXE,NETWORKACTIVSNIFFERV1.4.EXE,CRACKER.EXE,SRIN.EXE,PEDASM.EXE,
53ARCH.EXE,FPORT.EXE,BCW.EXE,APORTS.EXE,RERGCLEANR.EXE,REGCLEANER.EXE,TCPVIEW.EXE,
F-AGOBOT.EXE,HIJACKTHIS.EXE,_AVPM.EXE,
_AVPCC.EXE,_AVP32.EXE,ZONEALARM.EXE,
ZONALM2601.EXE,ZATUTOR.EXE,ZAPSETUP3001.EXE,
ZAPRO.EXE,XPF202EN.EXE......

可结束大量反病毒软件,防火墙,诊断工具。

病毒通过截获系统调用来隐藏病毒进程和病毒文件。所以可能出现有病毒症状但却找不到病毒的情况。

运行后主动连接IRC服务器。黑客通过irc方式可掌握被感染机器的几乎所有信息,利用被感染及其做任何事情。

病毒的清除法: 使用光华反病毒软件,彻底删除。
病毒演示:
病毒FAQ: Windows下的PE病毒。

开机按F8进安全模式,再删除~~~

第一:建议你先重启机子~按F8进入安全模式底下杀毒~
其次:考虑你的病毒残留在临时文件夹里面
建议如下处理
注意清空临时文件夹
您好不用担心;
既然杀毒软件能查出来就一定能杀,
如果杀不了,是因为病毒在运行;正在运行的程序不能修改或删除的。
那就建议你如下处理

另外请一定要清理一下你的临时文件夹
怎么清理临时文件夹?
http://zhidao.baidu.com/question/15818998.html?si=1
也可以使用超级兔子清理系统垃圾.更方便
这是因为有很多病毒主程序隐藏在临时文件夹里面,你杀毒的时候不能完全的删除
2007-1-18 超级兔子7.95
http://www.onlinedown.net/soft/2636.htm

手机卡顿反应慢怎么办?

如果手机升级系统后短时间内出现卡顿,属于正常现象,如果您使用的是华为手机,并非刚升级完出现,请按照以下方案排查:
注:升级系统后卡顿原因:由于系统升级后刚开始使用时,系统会对手机中的应用程序进行优化,此时手机负载较高,使用时可能会出现卡顿情况。建议升级完成后将手机灭屏充电2小时以上,然后重启手机以保证手机内已安装的应用优化完成。
1 检查手机是否正在下载、复制、传输等操作
如果手机正在执行上传下载(文件、图片、视频、应用等)、复制(文件管理拷贝数据等)、传输(手机克隆、Huawei Share等)等操作时感觉到卡顿,建议您等待任务结束或停止此操作。
您可以下拉状态栏查看上传、下载、传输文件的进度。
2 重启手机
请您重启手机后尝试。建议您2~3天重启一次手机,重启能有效的清理缓存,缓解卡顿现象。
3 检查手机是否发热或者充电时使用
手机发热严重时性能下降出现卡顿。建议您尽量避免充电时使用手机,适当降低屏幕亮度,关闭不使用或异常耗电应用与功能,如“蓝牙”,NFC等。
4 检查存储卡
(1)可能是存储卡存储的文件过多(建议预留10%以上空间),导致读写速度慢,建议您清理存储卡空间,或备份重要数据后格式化存储卡。
(2)可能是存储卡硬件异常,是否曾提示“存储卡异常”,若是,建议您尽快更换存储卡。
(3)若手机的默认存储位置为存储卡,建议您将默认存储位置更改为“内部存储”后尝试。
5 关闭省电模式、保持电量充足
如果您开启了省电模式,建议您关闭(设置 > 电池 > 省电模式和 超级省电),并保持电量充足(20%以上)。省电模式和低电量情况下,手机会降低性能以节省电量。
6 清理存储空间
手机运行内存和存储空间不足时会导致应用卡顿,建议您进入手机管家进行清理:
进入手机管家点击一键优化/立即优化,优化完毕后,手机管家会显示优化结果以及设置建议。根据提示,完成相应的设置。
进入手机管家点击清理加速,待扫描完毕后,点击清理项后的立即清理,根据提示删除多余的文件,并卸载不常用的应用,保持存储空间充足(建议预留20%以上)。
7 卸载第三方手机管家类软件
如果您的手机装有第三方手机管理类型的软件,请卸载此类应用后尝试。通常此类软件与手机自带的手机管家存在冲突,会导致运行卡顿。
8 升级系统版本
如果手机已经 Root,请恢复成官方稳定版本使用,详情请致电华为客服咨询。
建议您及时进行手机系统更新,并将应用升级到最新版本。新版本会对系统性能进行优化提升。更新方法:进入手机设置,搜索进入软件更新,点击检查更新。
9 恢复出厂设置
请您备份重要数据(QQ,微信等第三方应用需单独备份),将手机恢复出厂设置后重试。
10 仍然无法解决?
如果问题仍然存在,请您备份好数据(QQ,微信等第三方应用需单独备份)后携带购机凭证前往华为客户服务中心进行检测处理。
温馨提示:您可以选择夜间充电(或灭屏充电40min以上),可以一定程度上整理手机内存碎片,缓解卡顿现象。

手机卡顿反应慢怎么办?

如果手机升级系统后短时间内出现卡顿,属于正常现象,如果您使用的是华为手机,并非刚升级完出现,请按照以下方案排查:
注:升级系统后卡顿原因:由于系统升级后刚开始使用时,系统会对手机中的应用程序进行优化,此时手机负载较高,使用时可能会出现卡顿情况。建议升级完成后将手机灭屏充电2小时以上,然后重启手机以保证手机内已安装的应用优化完成。
1 检查手机是否正在下载、复制、传输等操作
如果手机正在执行上传下载(文件、图片、视频、应用等)、复制(文件管理拷贝数据等)、传输(手机克隆、Huawei Share等)等操作时感觉到卡顿,建议您等待任务结束或停止此操作。
您可以下拉状态栏查看上传、下载、传输文件的进度。
2 重启手机
请您重启手机后尝试。建议您2~3天重启一次手机,重启能有效的清理缓存,缓解卡顿现象。
3 检查手机是否发热或者充电时使用
手机发热严重时性能下降出现卡顿。建议您尽量避免充电时使用手机,适当降低屏幕亮度,关闭不使用或异常耗电应用与功能,如“蓝牙”,NFC等。
4 检查存储卡
(1)可能是存储卡存储的文件过多(建议预留10%以上空间),导致读写速度慢,建议您清理存储卡空间,或备份重要数据后格式化存储卡。
(2)可能是存储卡硬件异常,是否曾提示“存储卡异常”,若是,建议您尽快更换存储卡。
(3)若手机的默认存储位置为存储卡,建议您将默认存储位置更改为“内部存储”后尝试。
5 关闭省电模式、保持电量充足
如果您开启了省电模式,建议您关闭(设置 > 电池 > 省电模式和 超级省电),并保持电量充足(20%以上)。省电模式和低电量情况下,手机会降低性能以节省电量。
6 清理存储空间
手机运行内存和存储空间不足时会导致应用卡顿,建议您进入手机管家进行清理:
进入手机管家点击一键优化/立即优化,优化完毕后,手机管家会显示优化结果以及设置建议。根据提示,完成相应的设置。
进入手机管家点击清理加速,待扫描完毕后,点击清理项后的立即清理,根据提示删除多余的文件,并卸载不常用的应用,保持存储空间充足(建议预留20%以上)。
7 卸载第三方手机管家类软件
如果您的手机装有第三方手机管理类型的软件,请卸载此类应用后尝试。通常此类软件与手机自带的手机管家存在冲突,会导致运行卡顿。
8 升级系统版本
如果手机已经 Root,请恢复成官方稳定版本使用,详情请致电华为客服咨询。
建议您及时进行手机系统更新,并将应用升级到最新版本。新版本会对系统性能进行优化提升。更新方法:进入手机设置,搜索进入软件更新,点击检查更新。
9 恢复出厂设置
请您备份重要数据(QQ,微信等第三方应用需单独备份),将手机恢复出厂设置后重试。
10 仍然无法解决?
如果问题仍然存在,请您备份好数据(QQ,微信等第三方应用需单独备份)后携带购机凭证前往华为客户服务中心进行检测处理。
温馨提示:您可以选择夜间充电(或灭屏充电40min以上),可以一定程度上整理手机内存碎片,缓解卡顿现象。

手机慢卡顿怎么解决 解决方法如下

若在使用vivo手机过程中出现卡顿,可以参考以下方法缓解卡顿:

温馨提醒:由于升级后手机会对系统应用程序进行优化,可能会出现短时间的卡顿反应慢现象,请过1天后再观察测试。若并非刚升级完出现,请按照以下方案排查:

1、使用需要联网的应用程序卡顿反应慢

使用需要连接网络的应用程序时,如果Wi-Fi网速较慢或手机信号差导致网络速度较慢,都会导致手机出现卡顿反应慢现象。请尝试更换Wi-Fi热点、更换手机漏友位置保证手机信号良好或更换SIM卡等方法来排查确认。

2、请定期重启设备

重启手机能有效清理内存垃圾及碎片,建议2-7天重启1次(重启周期可跟据实际内存大小调整)。

3、检查手机是否发热

请进入【i管家>实用工具>手机降温】,检测手机温度是否过高,温度较高时手机会适当降低系统性能,以减少功耗和发热,请点击“一键降温”对手机进行降温。

4、检查省电模式和电量情况

如果开启了低电(省电)模式,手机会降低部分性能以延长续航时间,建议您进入【设置>电池】切换为正常模式,并保持电量充足(20%以上)。

5、卸载纤轮第三方手机管家类软件

第三方手机管理软件对手机自带的“i管家”可能存在冲突导致卡顿反应慢,请卸载后再尝毁搜信试。

6、清理内存

由于手机运行内存可用空间过小、存储内存可用空间过小(建议保留20%以上空间)都会导致手机卡顿反应慢。

请可以选择以下方法操作:

(1)底部上滑并停顿进入后台,清理暂时不用的后台程序

(2)进入i管家,点击“一键优化”对手机进行优化,必要时可通过“空间清理”释放更多空间

7、重启应用

如果使用应用卡顿,可结束应用后台,重新运行应用以改善使用体验,同时将应用升级到最新版本。

8、遇到运行游戏卡顿/不流畅的情况

可尝试调出游戏侧边栏,开启性能模式(Monster模式),或适当降低游戏参数设置,以改善游戏体验。

*注:游戏画质、抗锯齿等显示效果越高,系统负载越重,更容易导致发热、游戏运行不稳定等情况,建议在不影响视觉体验的情况下适当渗棚调整降低游戏画质等显示效果。

9、升级系统

系统新版本提升了兼容性和稳定性,建议进入【设置>系统升级】或【设置>我的设备>iQOO UI版本】检查手机系统是否为最新版本,并将应用升级到最新版本。

10、重置手机

进入【设置>系统管理>备份与重置】, 请备份好手机数据后,点击“还原所有设置”尝试,必要时可选择“清除所有数据”,对手机进行重置后再尝试。

如果尝试了以上方式后仍然无法解决设备出现的情况,请携带手机、购机凭证前往vivo客户服务中心处理。vivo客户服务中心地址:进入vivo官网/vivo商城岁塌APP--我的--网点查询,选择当前所在的城市即可获取服务中心的地址与联系方式。建议去之前先提前电话联系,避免空跑,合理规划行程,安全出行。

使用云服务备份的方法:

1、设备云备份

进入“云服务”APP--设备云备份--备份数据类型--选择需要备份的数据--返回上一页--立即备份--即可备份相关数据;打开“自动云备份”在设备充电、连接WiFi且锁屏时会每7天备份一次相关数据。

注:设备云备份可备份系统数据(包含桌面布局、闹钟、部分设置选项)、通话记录、短信、应用(仅备份安装包,不包含应用产生的数据)。

2、云盘备份

进入“云服务”--我的云盘--点击右下角的“+”--选择需上传的文件--上传--等待上传完成即可。

云盘支持上传图片、视频、音频、文档、微信文件、QQ文件、软件安装包、压缩包等各种文件。

备份后恢复的方法:

1、进入云服务--设备云备份--备份管理--与数据恢复--点击备份的数据--恢复--等待完成即可;

2、进入云服务丛雀则--我的云盘--点击需要下载的文件--下载到本地即可。

注:

1)设备云备份中一个设备只保留最新的一次备份数据,每次备份成功后,会覆盖云端已保存的旧备份数据。

2)便签的数据可以传输到原子笔记上,原子笔记的数据不能传输到便签上。

图文链接:网页链接

若有更多疑问,可进入vivo官网/vivo商城APP--我的--在线客服--下滑底部--在线客服--输入人工客服进入咨询了解。