品牌网站建设

psd转xhtml/css 88元/页起

  • 符合W3C标准的XHTML/CSS编码
  • 多浏览器及操作平台支持
  • SEO(搜索引擎)语义代码标准
  • 经过优化的和切片图像
  • 结构良好的XHTML/CSS
  • 转换页面越多,折扣越多
更多优惠

手机13146413981qq393992480msnyibing98@hotmail.com

windbg 这个工具可以手动的来抓dump文件,如果你想你的程序智能一些,当遇到你开发的程序crash时,你想程序自己抓到dump文件,然后你去分析就可以。 最近我刚好遇到这样一个事情,所以找了找,借助网络和论坛的朋友,才完成了这样一个事情。MiniDumpWriteDump 这个win32 api 可以完成这样一个事情。因为现在使用的是c#,所以封装了一下

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.IO;
using System.Threading;

namespace MiniDump
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            
try
            
{
                
string a = "";
                a 
= null;
                
if (a.ToString() == "1")
                    Console.WriteLine(
"a is 1");

               
            }

            
catch 
            
{
                MiniDump.TryDump(
"c:\MiniDmp.dmp", MiniDump.MiniDumpType.WithFullMemory);
            }


            Console.ReadKey();
        }

    }



   
    
/// <summary>
    
/// 该类要使用在windows 5.1 以后的版本,如果你的windows很旧,就把Windbg里面的dll拷贝过来,一般都没有问题
    
/// DbgHelp.dll 是windows自带的 dll文件 。
    
/// </summary>

    public static class MiniDump
    
{
        
/*
         * 导入DbgHelp.dll
         
*/

        [DllImport(
"DbgHelp.dll")]
        
private static extern Boolean MiniDumpWriteDump(
                                    IntPtr hProcess,
                                    Int32 processId,
                                    IntPtr fileHandle,
                                    MiniDumpType dumpType, 
                                    
ref MinidumpExceptionInfo excepInfo,
                                    IntPtr userInfo, 
                                    IntPtr extInfo );

        
/*
         *  MINIDUMP_EXCEPTION_INFORMATION  这个宏的信息
         
*/

        
struct MinidumpExceptionInfo
        
{
            
public Int32 ThreadId;
            
public IntPtr ExceptionPointers;
            
public Boolean ClientPointers;
        }


        
/*
         * 自己包装的一个函数
         
*/

        
public static Boolean TryDump(String dmpPath, MiniDumpType dmpType)
        
{

            
//使用文件流来创健 .dmp文件
            using (FileStream stream = new FileStream(dmpPath, FileMode.Create))
            
{
                
//取得进程信息
                Process process = Process.GetCurrentProcess();

                
// MINIDUMP_EXCEPTION_INFORMATION 信息的初始化
                MinidumpExceptionInfo mei = new MinidumpExceptionInfo();

                mei.ThreadId 
= Thread.CurrentThread.ManagedThreadId;
                mei.ExceptionPointers 
= Marshal.GetExceptionPointers();
                mei.ClientPointers 
= true;

                
                
//这里调用的Win32 API
                Boolean res = MiniDumpWriteDump(
                                    process.Handle,
                                    process.Id,
                                    stream.SafeFileHandle.DangerousGetHandle(),
                                    dmpType,
                                    
ref mei,
                                    IntPtr.Zero,
                                    IntPtr.Zero);

                
//清空 stream
                stream.Flush();
                stream.Close();

                
return res;
            }

        }


        
public enum MiniDumpType
        
{
            None 
= 0x00010000,
            Normal 
= 0x00000000,
            WithDataSegs 
= 0x00000001,
            WithFullMemory 
= 0x00000002,
            WithHandleData 
= 0x00000004,
            FilterMemory 
= 0x00000008,
            ScanMemory 
= 0x00000010,
            WithUnloadedModules 
= 0x00000020,
            WithIndirectlyReferencedMemory 
= 0x00000040,
            FilterModulePaths 
= 0x00000080,
            WithProcessThreadData 
= 0x00000100,
            WithPrivateReadWriteMemory 
= 0x00000200,
            WithoutOptionalData 
= 0x00000400,
            WithFullMemoryInfo 
= 0x00000800,
            WithThreadInfo 
= 0x00001000,
            WithCodeSegs 
= 0x00002000
        }

    }



}

Comments

Add comment


 

biuquote
  • Comment
  • Preview
微笑得意调皮害羞酷大笑惊讶发呆喜欢可怜尴尬闭嘴噘嘴皱眉伤心抓狂呕吐坏笑漫骂发怒
Loading



订阅新易网博客

  • 订阅到抓虾
  • 哪吒提醒
  • pageflakes
  • Add to My Yahoo!
  • Add to Google
  • 鲜果阅读器订阅图标
  • 订阅到有道阅读
  • 用QQ邮箱阅读空间订阅我的博客。
专业设计 量身定制 品牌网站建设 体验价只需999元
.me 我要我的域名 新网域名 260元/年 再送空间100M
印彩色名片,每盒仅5元
免费推广您的网站或产品 互换广告位、友情连接、软文

Recent comments