一 Windows上dump触发条件
在C++ 中,一般使用_beginthreadex来创建一个线程( 参见vs2003 中的threadex.c)
在用户指定的线程函数外,都有一个异常捕获
__try
{
_endthreadex (
( (unsigned (WINAPI *)(void *))(((_ptiddata)ptd)->_initaddr) )
( ((_ptiddata)ptd)->_initarg ) )
}
__except ( _XcptFilter(GetExceptionCode(), GetExceptionInformation()) )
{
/*
* Should never reach here
*/
_exit( GetExceptionCode() );
}
使用了windows的异常处理机制(SEH)
而过滤函数_XcptFilter 首先会检查设置了异常处理函数,如果用户设置了异常处理,
就首先会调用用户设置的异常处理函数,这就一个很好的时机。我们可以在这个异常处理里面
使用DBGHELP.DLL中的MiniDumpWriteDump写dump文件。
二 Linux上的dump时机
从ulimit 这个命令入手,这个是shell的内置命令
Shell 又是由busybox提供的,先编个busybox用用
Mid使用的是 busybox-1.6.1
下载地址:
http://www.busybox.net/downloads/