1.±³¾°½éÉÜ
Ëæ×ÅÓ¦ÓóÌÐòµÄ¸´ÔӶȲ»¶ÏÉÏÉý£¬ÒªÏ뽫ºÃµÄÉè¼ÆË¼ÏëÎȶ¨µÄÂäʵµ½ÏßÉÏ£¬ÎÒÃÇÐèÒª¾ß±¸½â¾öÎÊÌâµÄÄÜÁ¦¡£ÐèÒª¾ß±¸¶ÔÔËÐÐʱµÄ´íÎó½øÐж¨Î»ÇÒ¿ìËٵĽâ¾öËüµÄÄÜÁ¦¡£±¾ÆªÎÄÕÂÎÒ½«·ÖÏíÒ»ÏÂÎÒ¶Ô.NETÓ¦ÓóÌÐòµ÷ÊÔ·½ÃæµÄѧϰºÍʹÓÃ×ܽᡣ
Æäʵ¶Ôµ÷ÊÔ³ÌÐòµÄʹÓÃÊDz»Äѵģ¬¹Ø¼üÊÇÖªµÀËüµÄµ÷ÊÔÔÀí²ÅÐУ¬ÒòΪµ÷ÊÔÒ»¸ö³ÌÐò»òÕßdumpÎļþ£¬¶¼ÐèÒªÁ˽âÒ»¶¨µÄ.NETµ÷ÊÔµÄÔÀí²ÅÐУ¬±ÈÈçÄãÔÚ¸½¼Óµ½½ø³Ìµ÷ÊÔʱÔÚÖ´ÐÐij¸öSOSÀ©Õ¹ÃüÁîÊÇÐèÒªÇл»µ½Ö¸¶¨Ïß³ÌÉϵ쬶øµ÷ÊÔdumpÎļþ¾Í²»ÐèÒª£¬µ«ÊǶÔDumpÎļþµÄ·ÖÎöÓÐЩSOSÀ©Õ¹ÃüÁîÊDz»ÄÜÓõģ¬ÀàËÆÕâÑùµÄÎÊÌ⣬һµ©³öÏÖÄã¾ÍһͷÎíË®£¬ËùÒÔ»¨µãʱ¼äѧϰһÏÂÔÀíÊÇÓбØÒªµÄ¡£
2.»ù±¾ÔÀí£¨Windowsµ÷ÊÔ¹¤¾ßÏä¡¢.NETµ÷ÊÔÀ©Õ¹SOS.DLL¡¢SOSEX.DLL£©
ÔÚWindowsƽ̨Éϵ÷ÊÔÓ¦ÓóÌÐòÊ×Ñ¡Windowsµ÷ÊÔ¹¤¾ßÏ䣬¸Ã¹¤¾ßÏä°üº¬ÁËÒ»Ì×רÃÅÓÃÀ´Õë¶ÔWindows½øÐкܶิÔÓ³¡¾°µ÷ÊÔËùÐèÒªµÄ¹¤¾ßºÍ×é¼þ¡£ÐèҪעÒâµÄÊǴ˹¤¾ßÏäÊÇÕë¶ÔÓÚ·ÇÍйÜ.NETƽ̨Óõģ¬Òâ˼¾ÍÊÇ˵´Ë¹¤¾ßÏäµÄËùÓй¤¾ßºÍ×é¼þĬÈÏÊDz»Äܹ»½øÐÐ.NETÓ¦ÓóÌÐòµ÷ÊԵģ¬Ö»ÄÜÓÃÀ´¶ÔÔÉúWindows³ÌÐò½øÐе÷ÊÔ¡£
ÄÇô.NETƽ̨Ҳ²¢²»ÊÇÓÐ×Ô¼ºÒ»Ì×רÓõĵ÷ÊÔ¹¤¾ßÏ䣬±Ï¾¹.NET»¹ÊÇÊôÓÚWindowsƽ̨µÄ£¬ËùÒԺܴ󲿷ֵÄÔËÐÐʱÔÀí»¹ÊÇ»ùÓÚWindowsµÄ£¬ÒªÏëÔÚÔÉúµÄµ÷ÊÔÆ÷ÖжÔ.NETÕâ¸ö¾ßÓÐÐéÄâÔËÐÐʱ³ÌÐò½øÐе÷ÊÔ¾ÍÐèҪרÃŵķÒëÆ÷²ÅÄܹ»Ö´ÐС£SOS.DLL¡¢SOSEX.DLLÕâÁ½¸ö¾ÍÊÇÓÃÀ´¶Ô.NET³ÌÐòÔÚWindowsµ÷ÊÔ¹¤¾ßÖÐÆðµ½·Òë×÷Óõĵ÷ÊÔÆ÷À©Õ¹¡£¼òµ¥½²¾ÍÊÇ£¬ÕâÁ½¸ö×é¼þÊÇ.NETÏîÄ¿×éרÃÅ¿ª·¢³öÀ´ÓÃÀ´¶Ô.NETÓ¦ÓóÌÐò½øÐз½±ãµ÷ÊÔÓõ쬵±È»²»ÓÃÕâÁ½¸öÀ©Õ¹Ò²Äܵ÷ÊÔ.NET³ÌÐò£¬Ö»²»¹ý¾Í»áºÜÀ§ÄÑ£¬»á±»ºÜ¶àϸ½ÚÊø¸¿×¡¡£ÓÐÁËÕâ¸öµ÷ÊÔÀ©Õ¹Ö®ºó£¬ÎÒÃǾͿÉÒÔÈÃÔÉúWindowsµ÷ÊÔÆ÷ÕýÈ·µÄ·Òë³ö.NETÏà¹Ø¸ÅÄî¡£
ͼ1£º£¨Windowsµ÷ÊÔ¹¤¾ßÖ´ÐÐÁ÷³Ì£©

ËùÓжÔ.NET³ÌÐò·¢ÆðµÄµ÷ÊԻỰ¶¼Òª¾¹ý.NETµ÷ÊÔÀ©Õ¹×é¼þ½øÐзÒë²ÅÐУ¬Ò²¾ÍÊÇҪʹÓÃ.NETµ÷ÊÔÀ©Õ¹µÄµ÷ÊÔÃüÁîÀ´µ÷ÊÔ.NET³ÌÐò¡£ÉÏͼÖУ¬ÎÒÃÇÈç¹ûÒªÏëµ÷ÊÔ.NET³ÌÐò¾ÍÐèÒª½«.NETµ÷ÊÔÀ©Õ¹×é¼þ¼ÓÔØµ½Windowsµ÷ÊÔ¹¤¾ßÖÐÈ¥£¬È»ºó²ÅÄÜ·½±ãÔÚWindowsµ÷ÊÔ¹¤¾ßÖÐʹÓá£
2.1.Windowsµ÷ÊÔ¹¤¾ßÏä
Windowsµ÷ÊÔ¹¤¾ßÏäÖаüº¬Á˺ܶàµ÷ÊÔ¹¤¾ß£¬¶¼ÊÇÓÃÀ´¸¨ÖúÓÚÎÒÃǽøÐз½±ãµ÷ÊÔÓõġ£Windowsµ÷ÊÔ¹¤¾ßÏä·ÖΪÁ½¸öÖ´Ðа汾£¬X86¡¢X64ÕâÁ½¸ö°æ±¾ÊÇרÃÅÓÃÀ´·ÖÎö²»Í¬µÄÔËÐÐʱ»·¾³µÄ£¬Èç¹ûÄãµÄ·ÖÎö»·¾³ÊÇ32λµÄÄã¾ÍÐèҪʹÓÃX86µÄ°æ±¾£¬Í¬Àí£¬Èç¹ûÊÇÓÃ64λµÄ»·¾³¾ÍÐèҪʹÓÃX64µÄ°æ±¾¡£
ÏÂÔØµØÖ·Îª£ºhttp://www.microsoft.com / whdc
/devtools / debugging / default . aspx
¼ÇסѡÔñÄãÐèÒªµÄ°æ±¾£¬½¨ÒéÄãÁ½¸ö°æ±¾¶¼ÏÂÔØ£¬ÒòΪÄãËæÊ±ÐèÒªÕë¶ÔDumpÎļþ½øÐзÖÎö£¬¶øDumpÎļþÊÇËæÊ±¶¼ÓпÉÄÜÊÇÁ½¸ö°æ±¾¡£
Windows¹¤¾ßÏäÖеÄĬÈÏʹÓÃWinDbg.exe×÷Ϊµ÷ÊÔÊ×Ñ¡£¬ËüÊÇÒ»¸öGUI³ÌÐò¡£
ͼ2£º£¨Ä¬ÈϵÄWindowsµ÷ÊÔ¹¤¾ß£¬WinDbg£©

°²×°¹ýºóµÄ²Ëµ¥ÖоÍÖ»ÓÐWinDbg×÷Ϊµ÷ÊÔÑ¡Ôñ¡£
ÕâÀïÐèҪעÒâµÄÊÇ£¬µ±ÄãÆô¶¯ÁËWinDbgÖ®ºóÒªÁôÒâ³ÌÐòµÄÃû×ֺͱêÌ⣬ÒòΪµ±Äã´æÔÚÁ½¸ö°æ±¾µÄ
WinDbg ʱ»áÈÝÒ׸ã´í£¬ÔÚµ÷ÊÔʱ»áÓи÷ÖÖÆæ¹ÖµÄÎÊÌâ³öÏÖ£¬µ±ÄãÕÒÁ˰ëÌìÖ®ºó½á¹û·¢ÏÖÊÇÒòΪÓôíÁ˰汾£¬ÄǾÍÕýµÄÎÞÓïÁË¡£
ͼ3£º£¨×¢ÒâÔËÐÐWinDbgµÄ»·¾³°æ±¾£©

WinDbgÊÇĬÈϵĵ÷ÊÔ¹¤¾ß£¬µ«ÊÇÔÚ¹¤¾ßÏäÖл¹Óм¸¸ö¿ØÖÆÌ¨µ÷ÊÔ¹¤¾ß£¬ËûÃÇÐбØÖ®Ï±ȽÏÇáÁ¿¼òµ¥£¬ÓÐЩÈÎÎñ±È½ÏºÃÖ´ÐУ¬ÔÚÅäºÏcmdʹÓûáºÜ·½±ã£¬±ÈÈ繤¾ßÏäÖеÄtlist.exeÓÃÀ´²é¿´½ø³ÌÐÅÏ¢µÄС¹¤¾ß¾Í·Ç³£·½±ã¡£
ͼ4£º£¨·½±ã²é¿´½ø³ÌID£©

ÕâÑùÎÒÃǾͿÉÒԺܷ½±ãµÄattachµ½Ò»¸öÖ¸¶¨µÄ½ø³Ì½øÐе÷ÊÔ¡£
Windowsµ÷ÊÔ¹¤¾ßÏäÖÐÓкܶàÆäËûµÄ¹¤¾ß£¬ÐèÒªÓõϰ¿ÉÒÔʹÓÃcmdÇл»µ½µ±Ç°°²×°µÄĿ¼ÏÂ:C:
\ Program Files \Debugging Tools for Windows (x86)£¬»òÕßÄãÖ±½Óµ½¹¤¾ßµÄ°²×°Ä¿Â¼ÔËÐÐÒ²ÐУ¬Õâ¾Í¿´´Ë¹¤¾ßÊDz»ÊÇÖ§³ÖÊÖ¶¯ÎÞ²ÎÊýÆô¶¯ÁË¡£
2.2..NETµ÷ÊÔÀ©Õ¹°ü£¬SOS.DLL¡¢SOSEX.DLL
.NETµ÷ÊÔÀ©Õ¹°ü·ÖΪÁ½¸ö£¬Ò»¸öÊÇSOS.DLL£¬¸ÃÀ©Õ¹°üÊÇ.NETƽ̨µÄÒ»²¿·Ö£¬ÊôÓÚ¹Ù·½°æ±¾¡£¶øSOSEX.DLLÊÇ΢ÈíµÄÒ»Ãû½Ð¡°Steve
Johnson¡±Èí¼þ¹¤³Ìʦ¿ª·¢£¬ÊôÓÚ¸öÈËά»¤µÄ£¬ÓÃÀ´ÔöÇ¿SOS.DLL¹¦Äܵģ¬ÔÚSOSEX.DLLÓкܶ๦ÄܱȽÏÇ¿´óµÄÀ©Õ¹ÃüÁî¡£
ÏÂÔØµØÖ·Îª£º
32λ£ºhttp://www.stevestechspot.com
/ downloads / sosex _ 32 . zip
64λ£ºhttp://www.stevestechspot.com/
downloads / sosex_ 64 . zip
¾ßÌåµÄ°ïÖúÎĵµ¿ÉÒԲ鿴¸Ã¹¤³ÌʦµÄ²©¿ÍÀ´Á˽âÏêÇé¡£ÕâÁ½¸ö°æ±¾ÓÃÀ´µ÷ÊÔ²»Í¬»·¾³µÄ³ÌÐòµÄ£¬Èç¹ûÄãµÄ³ÌÐòÊÇÔËÐÐÔÚ32λ»·¾³Ï£¬¾ÍÓÃ32λµÄSOSEX£¬Í¬Àí£¬ÓÃÔÚ64λϾÍÓÃ64λSOSEX¡£
¶øSOS.DLLÀ©Õ¹°üÊǸú×Å.NETFrameworkÒ»Æð°²×°µÄ£¬µØÖ·Î»ÓÚ£ºC:\Windows
\ Microsoft .NET\Framework \ v4.0.30319 ¡£Èç¹ûÄãÊÇ64λϵͳµÄ»°µØÖ·¾ÍÊÇ£º
C:\Windows \ Microsoft .NET \ Framework64
\ v4.0.30319 ¡£ÔÚÕâÁ½¸öµØÖ·ÏÂÃæ¶¼¿ÉÒÔÕÒµ½ SOS.dll Îļþ£¬²»Í¬µÄĿ¼Ï¶ÔÓ¦ÓÚµ÷ÊÔ²»Í¬»úÆ÷ÀàÐ͵Ä.NET³ÌÐò¡£
ÓÐÁËÕâÁ½¸öÀ©Õ¹°üÖ®ºó¾Í¿ÉÒÔÔÚWinDbgÖжÔ.NET³ÌÐò½øÐзÖÎöÁË£¬¾ßÌåʹÓÃÎÒÃǺóÃæ»á½éÉÜ¡£
2.3.µ÷ÊÔϵͳµÄ»ù±¾Á÷³Ì¼°¼Ü¹¹£¨.NETDAC¸ÅÄî¡¢mscordacwks.dll£©
ÓÐÒ»¸öºÜÖØÒªµÄÔÀíÎÒ¾õµÃºÜÓбØÒª½²Ò»Ï£¬¾ÍÊÇ.NETDAC¸ÅÄî¡£
Æäʵ.NETDACÒ²¾ÍÊÇ.NET Data Access .NETÊý¾Ý·ÃÎʲ㣬Õâ¸öÊÇרÃÅÓÃÀ´Ìṩ¸øSOS.DLL\SOSEXDLL»òÕ߯äËûµ÷ÊÔÀ©Õ¹°üʹÓõģ¬ËùÓеĵ÷ÊÔÀ©Õ¹×é¼þ±ØÐëͨ¹ýÕâ¸öDAC²ÅÄÜ·ÃÎʵ½.NETÔËÐÐʱµÄÊý¾Ý£¬ËùÒÔÔÚ³õ´ÎʹÓÃSOSµÄʱºò»á¾³£Åö¼û¼ÓÔØ´íÎóµÄmscordacwks.dllÎļþ£¬´ËÎļþ¾ÍÊÇDACµÄÎïÀíÎļþ¡£
Õâ¸öÎļþºÍSOSÀ©Õ¹ÎļþÒ»Ñù£¬¶¼ÓÐÕⲻͬµÄ°æ±¾£¬µ±¼ÓÔØ²»Í¬ÀàÐ͵Ä.NET³ÌÐòʱ»áʹÓõ½²»Í¬°æ±¾µÄmscordacwks.dllÎļþ£¬µ±È»´ó²¿·ÖÇé¿öÏ´ËÎļþʱ×Ô¶¯¼ÓÔØµÄ£¬Ö»ÓгöÏÖÄã·ÖÎöµÄÎļþÓëÉú³Éµ÷ÊÔÎļþµÄ»·¾³²»Ò»ÖÂʱ²Å»á³öÏÖÍ·ÌÛµÄÎÊÌâ¡£
ͼ5£º£¨mscordacwks.dllλÖã©

µ±ÄãÖªµÀÕâ¸ö×é¼þÊǹ¤×÷ÓÚ´ËλÖÃʱ£¬µ±³öÏÖ¸úËüÏà¹ØµÄ´íÎóÌáʾʱÄã¾Í²»ÐèÒªµ£ÐÄÁË£¬Î޷ǾÍÊÇÎļþ¼ÓÔØµÄλÖûòÕß°æ±¾²»Æ¥Åä¶øÒÑ¡£
µ÷ÊÔÆ÷»á»°¡¢µ÷ÊÔÆ÷×¢ÈëÏß³Ì
»¹ÓÐÒ»µãÎÒ¾õµÃÒ²ºÜÓбØÒª½éÉܵľÍÊÇÓйص÷ÊÔÆ÷ÈçºÎµ÷ÊÔ.NET³ÌÐòµÄ£¬µ±ÎÒÃÇÔÚʹÓõ÷ÊÔÆ÷Æô¶¯±»µ÷ÊÔ³ÌÐò»òÕß½«µ÷ÊÔÆ÷¸½¼Óµ½±»µ÷ÊÔ½ø³Ìʱ£¬Æäʵµ÷ÊÔÆ÷»á×¢ÈëһЩÏ̵߳½.NET³ÌÐòÖУ¬Èõ÷ÊÔÏß³ÌÓë.NET³ÌÐòÔ±¾µÄÏß³ÌÔÚÒ»¸ö.NETÖ´Ðл·¾³ÖУ¬ÕâÑùµÄÄ¿µÄÊÇÄܹ»Æðµ½×î.NET³ÌÐòÔÚÖ´ÐÐʱµÄ¿ØÖÆ£¬±ÈÈçÖжÏÖ´ÐУ¬ÉèÖöϵ㡣µ±ÎÒÃÇÐèÒªÖ´ÐÐijЩ¸úÏß³ÌÉÏÏÂÎÄÏà¹ØµÄÀ©Õ¹ÃüÁîʱ¾ÍÐèÒªÇл»µ½ÕýÈ·µÄÏß³ÌÉÏÈ¥¡£
ͼ6£º£¨µ÷ÊÔÆ÷×¢ÈëỊ̈߳©

´Ëʱ£¬µ÷ÊÔÆ÷ʹÓÃÒ»¸ö×¢ÈëÏ߳̽«.NET³ÌÐòÔÚÖ´ÐÐʱÖжϣ¬ÔÀí¾ÍÊÇͨ¹ý·¢ËÍÏß³ÌÖжÏÃüÁîÀ´´ïµ½¿ØÖÆÄ¿±êỊ̈߳¬ÄÇôÊ×ÏÈÒªÄܹ»ÓëÔÏß³ÌͨѶ²ÅÐУ¬ËùÒÔÐèҪעÈëÍйÜÏ̡߳££¨×¢Ò⣺עÈëµÄÏ̲߳»Ò»¶¨¾ÍÊÇÍйÜ.NETỊ̈߳¬ÑÏÖØËü×îºÃµÄ·½·¨¾ÍÊDz鿴ËùÓÐËùÓеĽø³ÌÄÚÏ̺߳ÍËùÓÐÍйÜỊ̈߳¬¶Ô±ÈһϾÍÖªµÀÁË¡££©£¬ÆäʵÕâ¸öIDΪ3µÄÏß³ÌÊǵ÷ÊÔÆ÷»á»°Ï̡߳£
ͼ7£º£¨Çл»µ½ÔÍйÜỊ̈߳©

ÎÒÃÇͨ¹ý~0sÃüÁîÇл»µ½ÎÒÃÇÐèÒªµ÷ÊÔµÄÔÍйÜÏß³ÌÖУ¬±ÈÈ磬ÔÚÖ´ÐÐ !ClrStack
ÃüÁîʱ£¬¾ÍÐèÒªÇл»µ½µ±Ç°Ïß³ÌÉÏÖ´ÐС£
ÎÒÃÇÐèÒªÑéÖ¤ËüÊÇ·ñÊÇ×¢ÈëÁËÍйÜÏ̻߳¹ÊÇ·ÇÍйÜÏ̡߳£
ͼ8£º£¨ÍйÜÏß³ÌÁÐ±í£©

ʹÓÃ!ThreadsÃüÁî¿ÉÒԲ鿴½ø³ÌÄÚËùÓеÄÍйÜỊ̈߳¬½ö½öÊÇÍйÜỊ̈߳¬´ËÃüÁîÊÇÎÞ·¨²é¿´·ÇÍйÜÏ̵߳쬽ÓÏÂÀ´ÎÒÃÇʹÓÃÁíÍâÒ»¸öÃüÁîÀ´²é¿´ËùÓеÄÏ̡߳£
ͼ9£º£¨ËùÓеÄÖ´ÐÐʱỊ̈߳©

ÕâÑùÎÒÃǾͿÉÒÔÅжϳö£¬µ÷ÊÔÆ÷ʹÓÃÁËIDλ7µÄ×÷ΪĿǰµÄµ÷ÊԻỰÏ̡߳£ÖªµÀÕâЩ±³ºóµÄÔÀíºÜÖØÒª£¬µ±ÄãÔÚÖ´ÐÐij¸öµ÷ÊÔÃüÁîʱÄã¾Í»á·¢ÏÖ´ËÃüÁîÊÇ·ñÐèÒªÔÚ.NETÏß³ÌÖÐÖ´ÐУ¬»¹ÊÇ˵¿ÉÒÔÔÚµ÷ÊÔÆ÷»á»°Ïß³ÌÖÐÖ´ÐУ¬Ò»°ãdumpÀàµÄÃüÁî¶¼ÊÇ¿ÉÒÔÔ¶³ÌÖ´Ðеģ¬Ò²¾ÍÊÇ˵ÔÚµ÷ÊÔÆ÷»á»°ÖÐÖ´ÐУ¬µ±ÐèÒª¸ú×Ù.NETÏß³ÌÄÚ²¿¹ý³Ìʱ¾ÍÐèÒªÇл»µ½.NETÏß³ÌÉÏÈ¥Ö´ÐС£
2.4.VisualStudioÖм¯³ÉÀ©Õ¹µ÷ÊÔ£¨¸ü¼ÓϸÁ£¶ÈµÄµ÷ÊÔ³ÌÐò£©
SOSÀ©Õ¹Ò²ÊÇ¿ÉÒÔºÍVisualStudio½øÐм¯³ÉµÄ£¬ÕâÑùÕæµÄ·½±ãÁËÎÒÃǵ÷ÊÔһЩÐÔÄÜÒªÇó±È½Ï¸ßµÄ³ÌÐò£¬µ±³ÌÐòÔËÐÐÒ»¶Îʱ¼äºóÎÒÃÇÓÃVS¸½¼Óµ½½ø³Ì£¬È»ºó²é¿´Ò»Ð©ÖØÒªµÄ¶ÔÏóÊý¾Ý£¬µ«ÊÇ´ËʱÎÒÃÇ¿´²»µ½.NETÔËÐÐʱµÄһЩÊý¾Ý£¬±ÈÈ磺¶ÔÏóµÄ´úÁ䣬ÍйܶѵĴóС£¬Ï̳߳صÄÈÎÎñµÈ¡£Í¨¹ý¼¯³ÉSOSÀ©Õ¹»áÈÃÎÒÃǶԳÌÐòµÄÔËÐÐʱÓÐÁËÒ»¸ö¸ü¼Ó·½±ãµÄ¸ú×Ù¡£
ͼ10£º£¨´ò¿ª±¾µØ´úÂëµ÷ÊÔ£©

ÉèÖöϵ㣬ȻºóÔÚ¡±¼´Ê±´°¿Ú¡°£¨µ÷ÊÔ->´°¿Ú->¼´Ê±£©ÖмÓÔØÀ©Õ¹
SOS.DLL ¡£
ͼ11£º£¨ÔÚVisualStudio2012ÖмÓÔØSOS.dllÀ©Õ¹£©

ÕâÑùµÄ±ãÀûÐÔ´ó´óÌá¸ßÎÒÃÇÔÚµ÷ÊÔ³ÌÐòÄÚ´æ·½Ãæ¡¢Ï̷߳½ÃæµÄºÃ´¦£¬ÎÒÃÇ¿ÉÒÔÊʵ±µÄ×öѹÁ¦²âÊÔ£¬È»ºó
Attach process £¬Ö´ÐÐSOSÀ©Õ¹ÃüÃûÀ´²é¿´ÄÚ´æÎÊÌ⣬µ±ÐèÒªµ÷ÊÔ³ÌÐòÂ߼ʱÔÚµ¥²½µ÷ʽC#´úÂ룬һ¾ÙÁ½µÃ¡£
3.µ÷ÊÔ³ÌÐòÀàÐÍ£¨¿Í»§¶Ë³ÌÐò¡¢·þÎñ¶Ë³ÌÐò£©
.NET³ÌÐòÖ÷Òª·ÖΪÁ½À࣬һÀàÊǿͻ§¶Ë³ÌÐò£¬ÁíÒ»ÀàÊÇ·þÎñ¶Ë³ÌÐò¡£¶ÔÓÚÕâÁ½Àà³ÌÐòÀ´ËµÇ°Õßµ÷ÊÔʱ»ù±¾ÉÏ¿ÉÒÔͨ¹ý¸½¼Ó½ø³ÌµÄ·½Ê½½øÐе÷ÊÔ£¬¶ø¶ÔÓÚ·þÎñ¶Ë³ÌÐòÔò²»ÐУ¬ÒòΪ·þÎñ³ÌÐòͨ³£ÊÇÔËÐÐÔÚÒ»¸ö¸´ÔÓµÄÏßÉÏ»·¾³ÖУ¬ÎÒÃÇûÓÐÈκÎȨÏÞ»ò»ú»áÈ¥½Ó´¥£¬´ËʱÊÇͨ¹ý»ñÈ¡½ø³ÌµÄdumpÎļþÀ´½øÐзÖÎö¡£
¿Í»§¶Ë³ÌÐòÒ²´ó¸Å·ÖΪ¿ØÖÆÌ¨¡¢WinformÁ½ÖÖ£¬·þÎñ¶Ë³ÌÐò¶¼ÊÇ»ùÓÚASP.NET¿ò¼Ü£¬ËÞÖ÷ÓëIIS½ø³ÌÖС£
4.µ÷ÊÔ·½Ê½¼°³¡¾°
Õë¶Ô²»Í¬ÀàÐ͵ijÌÐò¼°³¡¾°ÐèҪʹÓò»Í¬µÄ·½Ê½½øÐе÷ÊÔ£¬¿Í»§¶Ë³ÌÐòÖеĿØÖÆÌ¨³ÌÐò»ù±¾ÉÏ¿ÉÒÔͨ¹ýÔÚµ÷ÊÔÆ÷ÖÐÆô¶¯µÄ·½Ê½½øÐе÷ÊÔ¡£Èç¹ûÊÇGUI³ÌÐòÔòÐèÒª¸½¼Ó½ø³Ì·½Ê½¡£·þÎñ¶Ë³ÌÐòÈç¹ûÔÚÌõ¼þÔÊÐíÏÂÒ²ÊÇ¿ÉÒÔʹÓø½¼Ó½ø³ÌµÄ·½Ê½½øÐе÷ÊԵ쬵«ÊÇÕâÒ»°ã²»Ì«¿ÉÄÜ£¬ÒòΪһµ©¸½¼Ó½ø³Ì½«
block סËùÓеÄÏ̻߳¡£
4.1.±¾»úµ÷ÊÔ£¨Attach Process£¬µ÷ÊÔÆ÷Æô¶¯£©
±¾»úµ÷ÊÔ¿ÉÒÔÖ±½ÓÔÚµ÷ÊÔÆ÷ÖÐÆô¶¯³ÌÐò£¬WinDbg´ò¿ªºó£¬ÔÚÎļþÖÐÓÐÒ»¸ö
Open Executable £¬¿ÉÒÔ´ò¿ªÒ»¸ö¿ÉÖ´ÐÐÎļþ¡£Èç¹ûÊÇʹÓÃNTSD¿ØÖÆÌ¨µ÷ÊÔÆ÷£¬ÔòÐèÒªÔÚNTSDºóÃæ¸úÉϳÌÐòµÄÖ´Ðз¾¶¡£
ͼ12£º£¨ntsd.exe´ò¿ªµ÷ÊÔ³ÌÐò£©

ͬÑù£¬ÔÚWinDbgÖÐÒ²ÓÐÒ»¸ö¸½¼Ó½ø³ÌµÄÑ¡ÏNTSDÒ²ÊÇÒ»Ñù£¬²Ù×÷ÆðÀ´¶¼±È½Ï¼òµ¥£¬ÐèҪעÒâµÄÊǵ±Äã¶Ô½ø³Ì½øÐи½¼ÓʱҪÇå³þ´Ë½ø³ÌÊǶàÉÙλµÄ£¬È»ºóÄãÐèҪѡÔñÕýÈ·µÄµ÷ÊÔÆ÷½øÐе÷ÊÔ¡£
4.2.²»Öжϵ÷ÊÔ»òÕß³ÆÊºóµ÷ÊÔ£¨¶ÔDumpÎļþ½øÐе÷ÊÔ£©
ÔÚ²»Äܹ»¶Ô±»µ÷ÊÔ³ÌÐòÖ±½Óµ÷ÊÔʱÎÒÃǾÍÐèÒª´Ë³ÌÐòµÄ½ø³Ì¾µÏñÎļþ£¬´Ë¾µÏñÎļþ¾ÍÊǽø³ÌÔÚijһ¸öʱ¿ÌµÄ¿ìÕÕ£¬Í¨¹ý·ÖÎöÕâ¸ö¿ìÕÕ£¬ÎÒÃÇÒ²ÊÇ¿ÉÒÔ¶¨Î»³öÎÊÌâµÄ¡£Ê×ÏÈÎÒÃÇÐèҪʹÓÃÊʵ±µÄ¹¤¾ßÀ´»ñÈ¡½ø³ÌµÄdumpÎļþ£¬²Ù×÷ϵͳ±¾ÉíµÄÈÎÎñ¹ÜÀíÆ÷¾ÍÓÐÕâ¸ö¹¦ÄÜ£¬dumpÎļþµÄ´æ·ÅλÖÃĬÈÏÔÚÓû§ÐÅÏ¢ÁÙʱÎļþÏÂÃæ£¬±ÈÈ磺XXX
\ Users \ Administrator \AppData \Local \ Temp £¬»ñÈ¡ÍêdumpÎļþºóÈÎÎñ¹ÜÀíÆ÷»áÓÐÌáʾ·¾¶µÄ¡£
ͼ13£º£¨Ê¹ÓÃÈÎÎñ¹ÜÀíÆ÷»ñÈ¡dumpÎļþ£©

ͼ14£º

ʹÓÃÈÎÎñ¹ÜÀíÆ÷»ñÈ¡dumpÎļþ¹ÌÈ»ºÜ·½±ã£¬µ«ÊÇÓÐÒ»¸öÎÊÌâ¾ÍÊÇÈç¹ûµ±Ç°»úÆ÷ÊÇ64λµÄ£¬²¢ÇÒÄãµÄ½ø³ÌÊÇÒÔ32λ·½Ê½ÔËÐеģ¬ÄÇô´ËʱÄã»ñÈ¡³öÀ´µÄdumpÎļþÊÇ64λµÄ£¬µ±Äãͨ¹ý32λµÄµ÷ÊÔÆ÷ÎÞ·¨½øÐзÖÎö£¬ÉõÖÁ»áÓи÷ÖÖÆäËûµÄÎÊÌ⣬ÕâЩÎÊÌâ¾ÍÊÇÒòΪ»ñÈ¡dumpÎļþµÄ»úÆ÷»·¾³ºÍÄãÔ¤ÏëµÄ²»Ò»Ö¡£Õâ¸öʱºòÎÒÃÇÏ£ÍûÄܹ»Í¨¹ýºÜÃ÷Á˵ķ½Ê½À´»ñÈ¡dumpÎļþ£¬¾ÍÊÇͨ¹ýµ÷ÊÔÆ÷À´»ñÈ¡dumpÎļþ¡£
ͨ¹ýµ÷ÊÔÆ÷À´»ñÈ¡dumpÎļþÓкܶàºÃ´¦£¬¿ÉÒÔÉèÖúܶàÑ¡Ï°üÀ¨Ö»»ñÈ¡½ø³ÌµÄÄIJ¿·Ö¾µÏñÊý¾ÝµÈ¡£
ÏÈͨ¹ýtlist.exe²é¿´ËùÓнø³ÌÁÐ±í£¬»áÓÐÒ»¸ö½ø³ÌIDºÅ£¬ÓÐÁËIDºÅ²ÅÄܽøÐлñÈ¡¡£
ͼ15£º£¨tlist¡¢ntsd ½øÈëµ½Ö¸¶¨½ø³ÌÖУ©

½øÈëµ½ntsdµ÷ÊÔÆ÷ÖУ¬È»ºóʹÓà .dump/mf d: \ order
. dmp ÃüÁî»ñÈ¡dumpÎļþµ½DÅÌ¡£
ͼ16£º£¨Ê¹ÓÃNTSD.exe»ñÈ¡dumpÎļþ£©

´ËʱÎÒÃǾͳɹ¦µÄ»ñÈ¡µ½ÁËdumpÎļþ¡£
ͨ¹ýµ÷ÊÔÆ÷»ñÈ¡dumpÎļþ±È½ÏÎȶ¨¿É¿¿£¬ÒòΪ»úÆ÷ÔËÐл·¾³µÄ²»Í¬£¬Í¨¹ýÈÎÎñ¹ÜÀíÆ÷»ñÈ¡µÄdumpÎļþ»á´æÔÚһЩÎÞ·¨Ô¤ÖªµÄÎÊÌ⣬Äã²¢²»Çå³þ£¬µ±Ç°ÈÎÎñ¹ÜÀíÆ÷ÊÇʹÓÃÄĸö°æ±¾µÄ»·¾³Êä³öµ÷ÊÔÐÅÏ¢µÄ¡£
ÓÐÁËdumpÎļþÖ®ºó¾ÍÊÇͨ¹ýµ÷ÊÔ¹¤¾ß´ò¿ª¾ÍÐÐÁË£¬WinDbg ¾ÍÓÐÒ»¸ö²Ëµ¥×¨ÃÅ´ò¿ªdumpÎļþµÄ£¬
Open Crash Dump ¡£Ê¹ÓÃntsdÐèҪʹÓÃÃüÁî ntsd -z d :\ order .
dmp¡£
5.Ò»°ãµ÷ÊÔ²½Öè
ÖªµÀÁ˵÷ÊÔµÄһЩÔÀíºÍ¹¤¾ßÖ®ºóÎÒÃÇÀ´¿´Ò»Ïµ÷ÊԵĻù±¾²½Ö裬ÕâЩ²½Öè¶¼¾ßÌåÊÇÖ¸µÄʲôÒâ˼£¬ÓÐÄÄЩºÃ´¦¡£
5.1.ÉèÖ÷ûºÅÎļþ£¨¹«ÓзûºÅ¡¢Ë½ÓзûºÅ£©
ÉèÖ÷ûºÅÎļþµÄÄ¿µÄÊÇΪÁËÄܹ»ÔÚµ÷ÊÔÆ÷ÖÐÕýÈ·µÄ¶ÔÓ¦µ½Ô´´úÂëµÄλÖúÍһЩԪÊý¾ÝÐÅÏ¢¡£·ûºÅÎļþ¶¼ÊÇ*.pdbÎļþÃû¡£·ûºÅÎļþ·ÖΪ¹«ÓкÍ˽ÓÐÁ½ÖÖ£¬¹«ÓеͼÊǹ«Ë¾¹«¿ª³öÈ¥ÓÃÓÚ°ïÖúµ÷ÊÔÓõ쬶øË½ÓеÄÊǹ«Ë¾ÄÚ²¿Ê¹Óõģ¬ÎªÊ²Ã´ÒªÇø·Ö¹«ÓкÍ˽ÓУ¬ÊÇΪÁË·ÀֹĿÏò¹¤³Ì¡£
ͼ17£º£¨ÉèÖ÷ûºÅÎļþ·¾¶£©

Ê×ÏÈͨ¹ý .sympath d: £¬ÉèÖÃÁË·ûºÅ·¾¶ÎªDÅÌ£¬È»ºóÓÖʹÓÃ
.symfix+ d: £¬ÊÇÉèÖÃ˽ÓзûºÅ·¾¶£¬²¢ÇÒʹÓÃdÅÌΪ»º´æÂ·¾¶¡£ÔÚ×îºóÒ»¸öºìÏßÖÐÎÒÃÇÄÜ¿´³öÀ´¡£
ΪʲôʹÓà .symfix ʱҪ´øÉÏÒ»¸ö+ºÅ£¬ÆäʵÊǸæËßµ÷ÊÔÆ÷ÎÒÃÇÊǶà¼ÓÒ»¸ö·ûºÅλÖ㬶ø²»ÊǸ²¸ÇÔÓзûºÅλÖá£
ÉèÖúÃÁËÁ½¸ö·ûºÅλÖúóÐèҪʹÓà .reload ÃüÁîÀ´ÖØÐ¼ÓÔØÄ£¿é£¬ÕâÑùµ÷ÊÔÆ÷²Å»áÈ¥·ûºÅλÖÃÈ¥¼ÓÔØÕâЩ·ûºÅ¡£
ͼ18£º£¨¼ÓÔØµÄ·ûºÅÎļþ£©

µ÷ÊÔÆ÷»á×Ô¶¯µÄ½«¹«ÓзûºÅÏÂÔØµ½Äã¸Õ²ÅÉèÖõĻº´æÄ¿Â¼ÖС£
5.2.¼ÓÔØ.NET³ÌÐòÀ©Õ¹µ÷ÊÔ°ü£¨SOS.DLL¡¢SOSEX.DLL£©
¶Ô.NET³ÌÐò·ÖÎöµ±È»ÊÇÐèÒª¼ÓÔØSOSÀ©Õ¹ÁË¡£¼ÓÔØSOSÀ©Õ¹ÓÐÁ½¸öÃüÁî¿ÉÒÔʹÓ㬵ÚÒ»¸öÊÇ
.load C: \ Windows \ Microsoft . NET \ Framewor \
v4.0 .30319 \SOS. dll £¬. load ÃüÁîÊÇÒª¸ø³ö sos.dll ¾ø¶Ô·¾¶µÄ¡£µÚ¶þ¸öÊÇ.loadby
sos modulename£¬.loadby ÃüÁîÊÇ¿ÉÒÔ¸ù¾ÝÒѾ¼ÓÔØµÄÄ£¿éÃû³ÆÀ´¼ÓÔØ SOS.dll
À©Õ¹¡£Ê¹ÓõÚÒ»¸öÃüÁîÓÐÒ»¸öÎÊÌâ¾ÍÊÇ£¬ÎÒÃÇÐèÒªÈ˹¤µÄÅжϵ±Ç°»·¾³µ½µ×ÊÇÐèҪʲô°æ±¾µÄ SO SÀ©Õ¹£¬¶øÊ¹ÓÃ
.loadby ÊÇ¿ÉÒÔ¸ù¾ÝÒѾ¼ÓÔØµÄÄ£¿éÀ´×Ô¶¯µÄ²éÕÒ¶ÔÓ¦µÄSOSÀ©Õ¹¡£
ʹÓÃ.loadby ÃüÁîºÜÈÝÒ׵ľͿÉÒÔ¼ÓÔØSOSÀ©Õ¹£¬¶ø²»ÐèÒª×Ô¼ºÈ¥Åжϵ±Ç°³ÌÐòÊÇ.NETʲô°æ±¾µÄ¡£
5.3.µ÷ÊÔµÄÈýÖÖÃüÁîÀàÐÍ£¨±ê×¼ÃüÁî¡¢ÔªÃüÁî¡¢À©Õ¹ÃüÁ
ÔÚʹÓõ÷ÊÔÆ÷µ÷ÊÔ³ÌÐòʱ£¬ËùҪʹÓõÄÃüÁîÖ÷Òª·ÖΪÈýÀà¡£
µÚÒ»ÀàÊDZê×¼ÃüÁ¾ÍÊDz»´øÈκηûºÅ¿ªÊ¼µÄÃüÁ±ÈÈ磺pb¡¢lmvm¡£ÕâÒ»ÀàÃüÁîÊÇËùÓÐWindowsµ÷ÊÔ¹¤¾ßÏäÖеĵ÷ÊÔ¹¤¾ßͨÓõ쬲»¹ÜÄãÊÇʹÓÃ
ntsd »¹ÊÇ winDbg ¶¼¿ÉÒÔ¡£
µÚ¶þÀàÃüÁîÊÇÔªÃüÁ¾ÍÊÇʹÓÃ"."ºÅ¿ªÊ¼µÄÃüÁÕâÒ»ÀàÃüÁî²¢²»ÊÇÔÚËùÓе÷ÊÔ¹¤¾ßÖÐͨÓõġ£µÚÈýÀàÊÇÀ©Õ¹ÃüÁÀ©Õ¹ÃüÁî¾ÍÊǸ÷¸öµ÷ÊÔÆ÷À©Õ¹³öÀ´µÄÃüÁҲ¾ÍÊÇÒÔ"!"¿ªÊ¼µÄÃüÁÈ磺!dumpheap
- stat £¬! dumpstatcobject s¡£
6.µ÷ÊÔÀ©Õ¹µÄ¼¸¸ö±È½Ï³£ÓõÄÃüÁSOS.DLL¡¢SOSEX.DLL£©
µ±È»Õâ¸ö´¿´âÊÇÎҵĸöÈ˸оõ£¬ÅÅÃû²»·ÖÏȺó¡£
!dumpheap -stat £¨²é¿´ÍйܶÑͳ¼ÆÐÅÏ¢£©
0:000>
!dumpheap -stat
Statistics:
MT Count TotalSize Class Name
65366e78 1 12
System.Collections.Generic.EnumEquali
tyComparer`1
[[System.Web.Compilation.FolderLevelBui
ldProviderAppliesTo,
System.Web]]
653667cc 1 12
System.Collections.Generic.ObjectEquality
Comparer`
1[[System.Web.WebSockets.IAsyncAbortableWebSocket,
System.Web]]
65365f08 1 12
System.Lazy`1+Boxed[[System.Web.Security.Cryptogr
aphy.AspNetCryptoServiceProvider,
System.Web]]
65365a34 1 12
System.Web.Security.Cryptography.Homogenizin
gCryptoServiceWrapper
65361e20
1 12 System.Web.Configuration.CustomErrorsMode |
!dumpheap -type £¨²é¿´Ä³¸öÀàÐÍÔÚ¶ÑÖеÄÐÅÏ¢£©
0:000>
!dumpheap -type System.String
Address MT Size
10731228 624aacc0 14
107312c4 624aacc0 22
107312dc 624aacc0 78
10731370
624aacc0 28 |
¿ÉÒÔÒ»ÑÛ¿´³öÄÄЩ¶ÔÏó¹ý´ó£¬ÕâÀïÎÒÊÇΪÁËÑÝʾ¶øÓã¬Ò»°ãÔÚÏîÄ¿¿ª·¢ÖУ¬ÎÒÃǶ¼´ó¸ÅÖªµÀÄÄЩ¶ÔÏó¿ÉÄÜ»áÓÐÄÚ´æÎÊÌ⣬±ÈÈ磺ͬ²½Êý¾ÝʱµÄ»º´æ¶ÔÏó¡£
!dumpobj 10731228 £¨²é¿´¶ÔÏóÏêÇ飩
0:000>
!dumpobj 10731228
Name:
System.String
MethodTable: 624aacc0
EEClass: 620b486c
Size:
14(0xe) bytes
File:
C:\Windows\Microsoft.Net\assembly\GAC_32\mscor
lib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
String:
Fields:
MT Field Offset Type VT Attr
Value Name
624ac480 40000aa 4 System.Int32 1 instance
0 m_stringLength
624ab6b8 40000ab 8 System.Char 1 instance
0 m_firstChar
624aacc0 40000ac c
System.String 0 shared static Empty
>> Domain:Value
00dbe558:NotInit 00e11c90:NotInit 00e5f040
:NotInit << |
!threads£¨²é¿´ÍйÜỊ̈߳©
0:000>
!threads
ThreadCount: 17
UnstartedThread: 0
BackgroundThread: 12
PendingThread: 0
DeadThread: 5
Hosted Runtime: no
Lock
ID OSID ThreadOBJ
State GC Mode GC
Alloc Context Domain
Count Apt Exception
7 1 43a8 00dc2620 28220 Preemptive
1484CA40:00000000
00dbe558 0 Ukn
15 2 4414 00dd38d0 2b220 Preemptive
00000000:00000000
00dbe558 0 MTA (Finalizer)
17 3 441c 00e09e88 102a220 Preemptive
00000000:00000000
00dbe558 0 MTA (Threadpool
Worker)
18 4 4420 00e0ce80 21220 Preemptive
00000000:00000000
00dbe558 0 Ukn |
µ±È»»¹ÓкܶàÆäËûºÜ²»´íµÄÃüÁÕâÀïÎÒ¸öÈ˾õµÃÕ⼸¸ö±È½Ï³£Óã¬ÒªÏëÁ˽âËùÓеÄÃüÁî¿ÉÊÇÔÚµ÷ÊÔÆ÷ÖÐʹÓÃÀ©Õ¹ÃüÁî!helpÀ´²é¿´ËùÓеÄÃüÁî°ïÖú¡£
0:000>
!help
SOS is a debugger extension DLL
designed to aid in the debugging
of managed programs. Functions are
listed by category, then roughly
in order of importance. Shortcut names
for popular functions are listed in
parenthesis. Type "!help <functionname>"
for detailed info on that function.
Object Inspection Examining code and stacks
|
DumpArray (da) ThreadState
DumpStackObjects (dso) IP2MD
DumpHeap U
DumpVC DumpStack
GCRoot EEStack
ObjSize CLRStack
FinalizeQueue GCInfo
PrintException (pe) EHInfo
TraverseHeap BPMD
COMState
Examining CLR data structures
Diagnostic Utilities |
DumpDomain
VerifyHeap EEHeap VerifyObj
Name2EE FindRoots
SyncBlk HeapStat
DumpMT GCWhere DumpClass
ListNearObj (
lno) DumpMD GCHandles
Token2EE GCHan
dleLeaks EEVersion
FinalizeQueue (fq)
DumpModule FindAppDomain
ThreadPool
SaveModule DumpAssembly
ProcInfo
DumpSigElem StopOnException (soe)
DumpRuntimeTypes
DumpLog DumpSig
VMMap RCWCleanupList
VMStat DumpIL
MinidumpMode
DumpRCW AnalyzeOOM (ao) DumpCCW
Examining the GC history Other
----------------------------- -----------------------------
HistInit FAQ HistRoot HistObj
HistObjFind HistClear |
7.¼òµ¥Ê¾Àý£¬³£¼ûµÄÏßÉÏÁ½ÀàÎÊÌâ
ÕâÀïÎÒÃÇʹÓÃÁ½¸öСʾÀýÖ±¹ÛµÄ¸ÐÊÜһϽӴ¥.NETÔËÐÐʱ״̬µÄ¸ÐÊÜ£¬¾¡¹ÜÕæÊµµÄÎÊÌâ¿ÉÄܱÈÕâ¸ö¸´ÔӺܶ࣬µ«Êǽâ¾öÎÊÌâµÄ˼·ÊÇÒ»ÑùµÄ¡£
7.1.ÄÚ´æÎÊÌ⣨ÄÚ´æÆ«¸ß£¬ÄÚ´æÒç³ö£©
·þÎñ³ÌÐò×îŵÄÐÔÄÜÎÊÌâÖ®Ò»¾ÍÊÇÄڴ棬µ±ÄÚ´æºÜ¸ßµÄÇé¿öÏÂÎÒÃÇÄܹ»Í¨¹ý¶ÔdumpÎļþ½øÐв鿴£¬¿´ÄÄЩ¶ÔÏóµ¼ÖÂÄÚ´æÒ»Ö±¸ß¡£µ±ÄÚ´æÒ»Ö±¸ßµÄÇé¿öϾͻáÈÝÒ×µ¼ÖÂÄÚ´æÒç³öÒì³££¬ÉõÖÁÊÇGCƵ·±µÄÖ´ÐУ¬µ±GCÒ»Ö´ÐоͻᵼÖ·þÎñ²¢·¢Ï½µ£¬ÒòΪËüÒª¹ÒÆðËùÓеÄỊ̈߳¨ÕâÀïÖ¸µÄÊÇ·þÎñÆ÷ģʽµÄ.NETCLR£¬Ïà¶ÔÓ¦µÄ»¹Óй¤×÷վģʽµÄ.NETCLR£©¡£
namespace
OrderManager
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("app begin...");
Console.ReadLine();
List<byte[]> l = new List<byte[]>();
for (int i = 0; i < 9999999; i++)
{
byte[] b = new byte[1000];
l.Add(b);
Console.WriteLine(i);
}
Console.WriteLine("end begin...");
Console.ReadLine();
}
}
} |
ÕâÒ»¶Î´úÂë»áÒ»Ö±·ÖÅäÄÚ´æÖ±µ½×îºóÄÚ´æÒç³öÒì³£ÖÕÖ¹³ÌÐò£¬ÎÒÃÇÔÚÄÚ´æ±È½ÏµÄÇé¿öÏÂÀ´»ñȡһ¸ödumpÎļþ£¬È»ºóͨ¹ýÊʵ±µÄÃüÁîÀ´¶¨Î»Äĸö¶ÔÏóÕ¼ÓÃÄÚ´æ¹ý¸ß¡£
ÔÚ²»ÖªµÀ¶ÔÏóÀàÐ͵ÄÇé¿öϱȽϼòµ¥µÄ·½Ê½¾ÍÊÇʹÓà £º0:000 >
!dumpheap -stat £¬ÃüÁ¸ÃÃüÁîµÄÒâ˼ÊÇͳ¼Æµ±Ç°¶ÑµÄÐÅÏ¢£¬ÔÚÕâÀï¾Í¿ÉÒÔÒ»ÑÛÕÒµ½Äĸö¶ÔÏóÕ¼ÓöàÉÙÄÚ´æ¡£
0:000>
!dumpheap -stat
Statistics:
MT Count TotalSize Class
Name
624ad6a8 1 12 System.Collections.Generic.
GenericEquali
tyComparer`1[[System.String,
mscorlib]]
624ac480 1 12 System.Int32
624aa58c 1 12 System.Collections.Generic
.ObjectEquality
Comparer`1[[System.Type,
mscorlib]]
624adec0 1 16 System.Security.Policy.Assem
blyEvidenceFactory
624ace34 1 16 System.Text.DecoderReplacemen
tFallback
624acde4 1 16 System.Text.EncoderReplacement
Fallback
6247a840 1 16 System.IO.TextReader+SyncText
Reader
624ade0c 1 20 Microsoft.Win32.SafeHandles
.SafePEFileHandle
6245fe58 1 20 Microsoft.Win32.SafeHandles
.SafeFileMappingHandle
6245fe08 1 20 Microsoft.Win32.SafeHandles
.SafeViewOfFileHandle
6245fd74 1 20 System.Text.InternalEncode
rBestFitFallback
6245f714 1 20 System.IO.Stream+NullStream
624ad3d4 1 24 System.Version
6245fdc4 1 24 System.Text.InternalDecoder
BestFitFallback
6245fa8c 1 24 System.IO.TextWriter+SyncTextWriter
00163170 1 24 System.Collections.Generic
.List`1[[System.Byte[], mscorlib]]
624ad4b4 1 28 System.Text.StringBuilder
624ab0b4 1 28 System.SharedStatics
6247c1b8 1 28 System.Text.DBCSCodePageEncoding
+DBCSDecoder
6245f94c 1 28 Microsoft.Win32.Win32Native+InputRecord
6245f664 1 28 System.Text.EncoderNLS
624ade68 1 32 System.Security.Policy.PEFileEvi
denceFactory
624acc10 1 32 System.Text.UnicodeEncoding
624ab938 1 36 System.Security.PermissionSet
624aced8 2 40 Microsoft.Win32.SafeHandles.Safe
FileHandle
624ab7b0 1 40 System.Security.Policy.Evidence
624aaa64 1 44 System.Threading.ReaderWriterLock
6247cd1c 1 44 System.Text.InternalEncoderBes
tFitFallbackBuffer
624aab90 1 48 System.Collections.Hashtable+bucket[]
620c2348 1 48 System.Collections.Generic.Dictionary
`2[[System.String,
mscorlib],[System.Globalization.CultureData,
mscorlib]]
620c2268
1 48 System.Collections.Generic.Dictionary`
2[[System.Type,
mscorlib],[System.Security.Policy.Evidence
TypeDescriptor,
mscorlib]]
624acf98 1 52 System.Collections.Hashtable
624ab8d8 1 52 System.Threading.Thread
624acb20 2 56 System.Reflection.Runtime
Assembly
6245f994 2 56 System.IO.__ConsoleStream
624adaa8 1 60 System.IO.StreamWriter
624ad7b4 1 60 System.Collections.Generic.
Dictionary`2+Entry
[[System.String,
mscorlib],[System.Globalization.CultureData,
mscorlib]][]
6249fbec
1 64 System.IO.StreamReader
624ab4e4 1 68 System.AppDomainSetup
6247c624 1 76 System.Text.DBCSCodePageEncoding
624ad474 1 84 System.Globalization.CalendarData
624ab060 7 84 System.Object
624aafe4 1 84 System.ExecutionEngineException
624aafa0 1 84 System.StackOverflowException
624aaf5c 1 84 System.OutOfMemoryException
624aae08 1 84 System.Exception
624ab130 1 112 System.AppDomain
624ad164 2 144 System.Globalization
.CultureInfo
624ab028 2 168 System.Threading.ThreadAbor
tException
624ad82c 2 264 System.Globalization.Number
FormatInfo
624aa9f8 1 284 System.Collections.Generic.
Dictionary`2+Entry
[[System.Type,
mscorlib],[System.Security.Policy.Evidence
TypeDescriptor,
mscorlib]][]
624ac448 8 484 System.Int32[]
624ad3a0 2 616 System.Globalization
.CultureData
624abe78 26 728 System.RuntimeType
624ab680 7 2910 System.Char[]
6245ab98 25 18064 System.Object[]
624aacc0 3283 85972 System.String
00363a78 7 2031754 Free
624696f8 2 2097184 System.Byte[][]
624acf54 301232 304844554 System.Byte[] |
×îºóÒ»¸öÏÔÈ»ÄÚ´æÕ¼ÓñȽϸߣ¬Õ¼ÁË 304844554 byte£¬Èç¹ûÄãÏëÔÚ´ËÇé¿öÏÂÖªµÀ¶ÔÏóµÄÄÚ´æµØÖ·Äã¾ÍÖ±½ÓʹÓÃ
!dumpheap £¬²»´øÈκβÎÊý¡£ÓÉÓÚ´ËÃüÁî»áµ¼ÖºܶàÊä³ö£¬ÎÒÕâÀï¾Íд³öÊä³öÄÚÈÝÁË¡£Í¨¹ý!dumpheap
»áµÃµ½ÄÚ´æºÜ¸ßµÄ¶ÔÏóµØÖ·£¬02d55368 £¬Õâ¸öµØÖ·¾ÍÊÇ System.Byte[] ¶ÔÏó£¬ÎªÁËÕÒµ½¶ÔÏóÔÚÄÄÀï·ÖÅäµÄ£¬ÎÒÃÇÐèҪʹÓÃ!gcroot
02d55368£¬ÃüÁ²é¿´¶ÔÏóµÄ¸ùÔÚÄÄÀï¡£
0:000> !gcroot 02d55368
Thread 143310: 0028f364
004f0100 OrderManager.Program.Main(System.
String[])
[e:\NETDebug\DebugDemoProject\OrderManager\
Program.cs @ 22]
ebp+18: 0028f380
-> 01b746c0 System.Collections.Generic.List
`1[[System.Byte[],
mscorlib]]
-> 02d55368 System.Byte[][] |
ÖªµÀÁ˸ù¾ÍºÃ°ì¶àÁË£¬Ö±½Ó¿´Ô´´úÂë¾ÍÄÜ·¢ÏÖÎÊÌâ¡£Èç¹ûÄ㻹²»ËÀÐĵϰ¿ÉÒÔʹÓÃ
!dumpobj ²é¿´ List ¶ÔÏó¡£
0:000> !dumpobj 01b746c0
Name:
System.Collections.Generic.List`
1[[System.Byte[],
mscorlib]]
MethodTable:
00163170
EEClass: 6211c8b0
Size: 24(0x18) bytes
File:
C:\Windows\Microsoft.Net\assembly\GAC
_32\mscorlib\v4.
0_4.0.0.0__b77a5c561934e089\mscorlib.dll
Fields:
MT Field Offset Type VT Attr Value Name
6245ab98 4000c75 4 System.Object[] 0 instance
02d55368 _items
624ac480 4000c76 c System.Int32 1 instance
301229
_size
624ac480 4000c77 10 System.Int32 1 instance
301229
_version
624ab060 4000c78 8 System.Object 0 instance
00000000
_syncRoot
6245ab98 4000c79 0 System.Object[] 0 shared
static
_emptyArray
>> Domain:Value dynamic statics NYI
00359520:
NotInit << |
ÕâÀïÐèҪעÒâµÄÊÇ£¬Èç¹ûÄãÊÇÏëÖ´ÐÐ !Clrstack -a ÃüÁîµÄ»°£¬µ±ÄãʹÓõ÷ÊÔÆ÷Æô¶¯»òÕßÊǸ½¼Ó½ø³ÌµÄ·½Ê½µÄ»¯£¬Òª¼ÇסÇл»µ½Êʵ±µÄÏß³ÌÉϲÅÄÜ¿´ÐС£
7.2.Ïß³ÌÎÊÌ⣨CPU¹ý¸ß£¬Ïß³ÌËÀËø£©
CPU¹ý¸ßÒ²ÊÇÏßÉϱȽϼ¬ÊÖµÄÎÊÌâÖ®Ò»£¬²é¿´CPU¹ý¸ßµÄ²½ÖèÒ»°ã·ÖΪÁ½²½£¬²é¿´Ï̵߳ÄÖ´ÐÐʱ¼ä£¬È»ºóÇл»µ½Ïß³ÌÉÏÏÂÎÄ£¬Ö´ÐÐ!ClrStack
-a£¬¿´µ±Ç°Ïß³ÌÔÚÄÄÀ﹤×÷£¬µ½µ××öʲô²Ù×÷ÄØ¡£
0:004>
!runaway
User Mode Time
Thread Time
0:143310 0 days 0:00:01.934
4:142ac0 0 days 0:00:00.046
7:143874 0 days 0:00:00.000
6:143870 0 days 0:00:00.000
5:14386c 0 days 0:00:00.000
3:1432ec 0 days 0:00:00.000
2:143384 0 days 0:00:00.000
1:143254 0 days 0:00:00.000 |
²âÊÔÏß³ÌIDΪ0µÄÖ´ÐÐʱ¼ä±È½Ï´ó£¬ÎÒÃÇÐèÒªÇл»µ½Ïß³Ì0ÉÏÈ¥Ö´Ðв鿴µ÷ÓöÑÕ»ÐÅÏ¢£¬~0s¡£
0:000>
!ClrStack -a
0028f348 62b897f9 System.IO.TextWrite
r+SyncTextWriter.
WriteLine(Int32)
PARAMETERS:
this (<CLR reg>) = 0x01b74258 value =
<no data>
0028f358 62a66313 System.Console.
WriteLine(Int32)
PARAMETERS:
value = <no data>
0028f364 004f0100 OrderManager.Program.
Main(System.String[]) [e:\NETDebug\Debug
DemoProject\OrderManager
\Program.cs @ 22] PARAMETERS:
args (0x0028f38c) = 0x01b71fe4
LOCALS:
0x0028f380 = 0x01b746c0
0x0028f388 = 0x000498ac
0x0028f37c = 0x16a2e338
0x0028f384 = 0x00000001
0028f51c 63162952 [GCFrame: 0028f51c] |
ÎÒÃǻᷢÏÖÔÚMain·½·¨ÖÐÓÐÒ»¸ö±¾µØ±äÁ¿0x0028f380 £¬±£´æµÄÖµÊÇ
0x01b746c0 £¬Ëü¾ÍÊÇÖ¸Ïò¸Õ²Å·ÖÅäºÜ¶àÄÚ´æµÄList<byte[]>¶ÔÏó¡£
Ïß³ÌËÀËø±È½Ï¸´ÔÓ£¬ÕâÀïÖ»¸øÎÒÈÏΪ±È½Ï¼òµ¥µÄÃüÁͨ¹ý´ËÃüÁî¿ÉÒÔÒ»ÑÛ¿´³öÄĸöÏ̳߳ÖÓÐÁËÄĸöËø£¬Ä¿Ç°ÔڵȴýÄĸöËø¡£
0:000>
!syncblk
Index SyncBlock MonitorHeld Recursion Owning
Thread Info SyncBlock
Owner
4 0021fb20 3 1 00221f98 14974c 3 01ae2394
OrderManager.ImportOrder
¡¡ 5 0021fb54 3 1 002234a8 149754 4 01ae23a0
OrderManager.ImportOrder
-----------------------------
Total
5
CCW 0
RCW 0
ComClassFactory
0
Free 0 |
ÕâÊÇÁ½¸öËø£¬Ò²¾ÍÊÇÁ½¸ö¶ÔÏóͬ²½¿é¡£½øÒ»²½Ê¹ÓÃSOSEX.dllÖеÄ!dlk²é¿´ËÀËøµÄ×Ô¶¯»¯¼ì²éÐÅÏ¢¡£
0:000>
!dlk
Examining SyncBlocks... Scanning for
ReaderWriterLock instances...
Scanning for holders of ReaderWriterLock
locks... Scanning for ReaderWriterLockSlim
instances... Scanning for holders of Reade
rWriterLockSlim locks... Examining Critical
Sections... Could not find symbol ntdll!
RtlCriticalSectionList. Scanning for threads
waiting on SyncBlocks... Scanning for
threads waiting on ReaderWriterLock locks...
Scanning for threads waiting on ReaderWriter
LocksSlim locks... Scanning for threads waiting
on CriticalSections... *DEADLOCK DETECTED* CLR
thread
0x3 holds the lock on SyncBlock 0021fb20 OBJ:01ae2394[OrderManager.ImportOrder]
..
.and is waiting for the lock on SyncBlock
0021fb54 OBJ:01ae23a0[OrderManager.ImportOrder]
CLR thread 0x4 holds the lock on SyncBlock
0021fb54 OBJ:01ae23a0[OrderManager.ImportOrder]
...and is waiting for the lock on SyncBlock
0021fb20 OBJ:01ae2394[OrderManager.ImportOrder]
CLR Thread 0x3 is waiting at System.Threading.Monitor.Enter(System.Object,
Boolean ByRef)(+0x17 Native) CLR Thread 0x4
is waiting at System.Threading.Monitor.Enter
(System.Object, Boolean ByRef)(+0x17 Native)
1 deadlock detected. |
×¢ÒâÎÒ¼Ó´ÖµÄÄǶλ°£¬¼ì²âµ½ËÀËø¡£
8.»ñÈ¡DumpÎļþʱµÄÖØÒª×¢ÒâÊÂÏî
ÔÚ»ñÈ¡dumpÎļþ·½ÃæÎÒÒ²Òª·ÖÏíÒ»ÏÂÖØÒªµÄ×¢ÒâÊÂÏî¡£Èç¹û»ñÈ¡dumpÎļþ²»ÕýÈ·µÄ»°ÊÇÎÞ·¨½øÐзÖÎöµÄ£¬»á³öÏÖÈÎºÎÆæ¹ÖµÄÎÊÌâ¡£
µÚÒ»¸ö¾ÍÊÇʹÓÃ64λ»úÆ÷ÉϵÄÈÎÎñ¹ÜÀí»ñÈ¡32λ½ø³ÌdumpÎļþ£¬Õâͨ³£ÊÇ·¢ÉúÔÚ·þÎñÆ÷ÉÏ£¬ÓÉÓÚ·þÎñÆ÷IISĬÈÏµÄÆô¶¯½ø³Ì·½Ê½ÊÇ64λµÄ£¬µ«ÊÇÒ²ÓÐЩÇé¿öÏ»á±ä³É32λµÄ¡£
ͼ19£º

Èç¹û½ø³ÌÊÇÒÔ32λ·½Ê½ÔËÐеģ¬ÄÇôÕâ¸öʱºò»ñÈ¡³öÀ´µÄdumpÎļþÊDz»ºÃ·ÖÎöµÄ£¬´ËʱӦ¸ÃʹÓõ÷ÊÔÆ÷¹¤¾ß½øÐÐ
dump µÄ»ñÈ¡¡£»ñÈ¡³öÀ´µÄdumpÎļþºÍ·ÖÎö»úÆ÷Éϵĵ÷ÊÔÆ÷»·¾³²»Ò»ÖµÄÇé¿öÏ»á³öÏÖÈçϼ¸¸ö´íÎó¡£
ͼ20£º
Õâ¸öÎÊÌâÊÇδÄܼÓÔØÕýÈ·°æ±¾µÄ mscordacwks . dll .
NETDAC µ÷ʽ×é¼þ¡£
Õâ¸öÎÊÌâÊǵ±Ç° SOS .dll ºÍ .NET ³ÌÐòËùʹÓõÄ.NET°æ±¾²»Ò»Ö£¬Õâ¸öÎÊÌâµÄ³öÏÖÒ»°ã¶¼ÊÇÎÒÃÇͨ¹ý.load
xx \xx\SOS.dll £¬ÊÖ¶¯·½Ê½¼ÓÔØµÄ¡£
ͼ22£º

Õâ¸öÎÊÌâ³öÏÖÓкü¸ÖÖ¿ÉÄÜÐÔ£¬¶Ô³£¼ûµÄÎÊÌâ¾ÍÊÇδÄÜʹÓÃÕýÈ·µÄ·½·¨»òÕß¹¤¾ß»ñÈ¡
dump Îļþ£¬µ¼ÖÂdumÎļþ»ñÈ¡µÄ»úÆ÷ºÍ±¾µØµ÷ÊԵĻúÆ÷Õû¸ö»·¾³²»Ò»Ö¡£
9.×ܽá
±¾ÆªÎÄÕ·ÖÏíÎÒ¶Ô.NETÓ¦ÓóÌÐòµ÷ÊÔ·½ÃæÑ§Ï°ºÍʵ¼ùµÄһЩ¾Ñ飬¹©¹ã´ó²©ÓѲο¼¡£Èç¹ûÏëϵͳµÄѧϰһÏÂÕâ·½ÃæµÄ֪ʶ¿ÉÒԲο¼¡¶.NET¸ß¼¶µ÷ÊÔ¡·Ò»Ê飬´ËÊé·Ç³£µ×²ã£¬¶Ô.NETÔËÐÐʱÔÀí½²µÄºÜ͸³¹£¬¿ÉÒÔ×÷ΪÉîÈëѧϰ.NETµÄÒ»ÃŲο¼Êé¡£
|