Crash dump程序資訊

2021-09-11 19:49:17 字數 2981 閱讀 4508

linux下 比較簡單,這裡不在說明,

windows下 相對複雜一點,用setunhandledexceptionfilter 來捕獲 minidumpwritedump 來寫dmp檔案,這種方法還不夠完全,一些錯誤 一樣無法捕獲 比如 多次 delete ,可修改登錄檔  crash自動生成dmp 而不用**去控制   結合**控制 一起使用

#if _win32

#include

#include

#pragma comment(lib, "dbghelp.lib")

void myinvalidparameterhandler(const wchar_t* expression,

const wchar_t* function,

const wchar_t* file,

unsigned int line,

uintptr_t preserved)

long customcrashhandledexceptionfilter(_exception_pointers *exceptioninfo)

;systemtime tm;

handle hfile = null;

time_t rawtime;

struct tm * t;

time(&rawtime);

t = localtime(&rawtime);

sprintf(strdumpfile, "%d%s%d-%04d-%02d-%02d-%02d-%02d-%02d.dmp", sid, name.c_str(), g_inner_id, t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->www.boyunylpt1.com tm_min, t->tm_sec);

hfile = createfilea(strdumpfile, generic_write, file_share_write, null, create_always, file_attribute_normal, null);

if (hfile != invalid_handle_value)

return exception_continue_search;

}lptop_level_exception_filter winapi emptysetunhandledexceptionfilter(

lptop_level_exception_www.yingka178.com filter lptoplevelexceptionfilter)

void mypurecallhandler(void)

bool hooksetunhandledexceptionfilter()

class crashhandler

{public:

crashhandler()

{//    seterrormode(sem_failcriticalerrors);

setunhandledexceptionfilter((lptop_level_exception_filter)customcrashhandledexceptionfilter);

_purecall_handler old_pure_handle;

old_pure_handle = _set_purecall_handler(mypurecallhandler);

_invalid_parameter_handler oldhandler;

oldhandler = _set_invalid_parameter_handler(myinvalidparameterhandler);

hooksetunhandledexceptionfilter();

在高階導數的時候說過,如果兩個函式每一階導數都相等,那麼"理論上"兩個函式是相等的。

因為我們有cos′(x)=−sin(x)、cos′′(x)=−cos(x)、cos′′′(x)=sin(x)、cos′′′′(x)=cos(x)

此後就是−sin(x)、−cos(x)、sin(x)、cos(x)迴圈,求導次數x,其xmod 4=1,2,3,0的時候分別對應這四個。

cos(0)=1⇒f(x)=a0+∑ni=1ai⋅0=a0=1

cos′(0)=0⇒f′(x)=1⋅a1+∑ni=2(i−1)ai⋅0=1!⋅a1=0

cos′′(0)=−1⇒f′′(x)=1⋅2⋅a2+∑ni=3(i−1)⋅(i−2)ai=2!⋅a2=−1

cos′′′(0)=0⇒f′′′(x)=1⋅2⋅3a3+∑ni=4(i−1)⋅(i−2)⋅(i−3)ai=3!⋅a3=0

cos′′′′(0)=1⇒f′′′′(x)=1⋅2⋅3⋅4a4+∑ni=5(i−1)⋅(i−2)⋅(i−3)⋅(i−4)ai=4!⋅a4=1

可以發現規律了,假設取了i次導數,且有i=2n。

n是奇數有:i!⋅ai=−1⇒ai=−1i!

n是偶數有:i!⋅ai=1⇒ai=1i!

也就是cos(x)=1−x22!+x44!−x66!+x48!−⋯

同樣的思路可以證明sin(x)=∑∞i=2n+1,n∈n(−1)nxii!=x−x33!+x55!−x77!+⋯

證明ex=⋯比這更容易,根據定義(ex)′=ex,重複上述過程即可。

麥克勞林展開式

ex=∑∞i=0xii!=1+x11!+x22!+x33!+x44!+⋯

sin(x)=∑∞i=2n+1,n∈n(−1)nxii!=x−x33!+x55!−x77!+⋯

cos(x)=∑∞i=2n,n∈n(−1)nxii!=1−x22!+x44!−x66!+⋯

本文正題

eix=1+(ix)11!+(ix)22!+(ix)33!+(ix)44!+(ix)55!=1+ix1!−x22!−ix33!+x44!+ix55!−⋯

把帶有i的提出來有:

eix=1−x22!+x44!−x66!+⋯+i(x−x33!+x55!−x77!)=cos(x)+i×sin(x)

當x=π的時候

eiπ=cos(π)+i×sin(π)=−1

所以

Crash dump中需要重點關注的資訊

crash都是發生在某一函式中,而95 的crash都是由下面兩種情況中的一種導致的 因此要分析crash dump,大多數情況都是尋找錯誤資料的 下面是一些常見的,導致資料錯誤的例子 使用了未初始化的變數.比如沒有分配記憶體的指標,沒有初始化的criticalsection.錯誤地計算了函式引數....

Crash dump中需要重點關注的資訊

crash都是發生在某一函式中,而95 的crash都是由下面兩種情況中的一種導致的 因此要分析crash dump,大多數情況都是尋找錯誤資料的 下面是一些常見的,導致資料錯誤的例子 使用了未初始化的變數.比如沒有分配記憶體的指標,沒有初始化的criticalsection.錯誤地計算了函式引數....

Crash dump中需要重點關注的資訊

crash都是發生在某一函式中,而95 的crash都是由下面兩種情況中的一種導致的 因此要分析crash dump,大多數情況都是尋找錯誤資料的 下面是一些常見的,導致資料錯誤的例子 使用了未初始化的變數.比如沒有分配記憶體的指標,沒有初始化的criticalsection.錯誤地計算了函式引數....