{"id":4805,"date":"2020-11-06T15:12:07","date_gmt":"2020-11-06T07:12:07","guid":{"rendered":"https:\/\/damogame.cn\/wordpress\/?p=4805"},"modified":"2020-11-06T15:12:07","modified_gmt":"2020-11-06T07:12:07","slug":"%e4%bd%bf%e7%94%a8dbghelp%e8%8e%b7%e5%8f%96%e8%b0%83%e7%94%a8%e5%a0%86%e6%a0%88-release%e4%b8%8b%e7%9a%84%e8%b0%83%e8%af%95%e6%96%b9%e6%b3%95%e5%ad%a6","status":"publish","type":"post","link":"https:\/\/i007.cc\/wordpress\/archives\/4805","title":{"rendered":"\u4f7f\u7528dbghelp\u83b7\u53d6\u8c03\u7528\u5806\u6808&#8211;release\u4e0b\u7684\u8c03\u8bd5\u65b9\u6cd5\u5b66"},"content":{"rendered":"<p><a href=\"http:\/\/www.cppblog.com\/kevinlynx\/archive\/2008\/03\/28\/45628.html\">\u539f\u6587\u5730\u5740<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Author : Kevin Lynx<\/p>\n<p>\u5f53\u8f6f\u4ef6\u4f5c\u4e3arelease\u6a21\u5f0f\u88ab\u53d1\u5e03\u7ed9\u7528\u6237\u65f6\uff0c\u5f53\u7a0b\u5e8f\u5d29\u6e83\u65f6\u6211\u4eec\u5f88\u96be\u53bb\u67e5\u627e\u539f\u56e0\u3002\u5e38\u89c1\u7684\u624b\u6cd5\u662f\u8f93\u51faLOG\u6587\u4ef6\uff0c\u6839\u636eLOG\u6587\u4ef6\u5206\u6790<br \/>\n\u7a0b\u5e8f\u5d29\u6e83\u65f6\u7684\u8fd0\u884c\u60c5\u51b5\u3002\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7SEH\u6765\u6355\u83b7\u7a0b\u5e8f\u9519\u8bef\uff0c\u7136\u540e\u8f93\u51fa\u4e00\u4e9b\u6709\u7528\u7684\u4fe1\u606f\u4f5c\u4e3a\u6211\u4eec\u5206\u6790\u9519\u8bef\u7684\u8d44\u6599\u3002\u4e00\u822c\u6211\u4eec\u9700\u8981<br \/>\n\u8f93\u51fa\u7684\u4fe1\u606f\u5305\u62ec\uff1a\u7cfb\u7edf\u4fe1\u606f\u3001CPU\u5bc4\u5b58\u5668\u4fe1\u606f\u3001\u5806\u6808\u4fe1\u606f\u3001\u8c03\u7528\u5806\u6808\u7b49\u3002\u800c\u8c03\u7528\u5806\u6808\u5219\u662f\u6700\u6709\u7528\u7684\u90e8\u5206\uff0c\u5b83\u53ef\u4ee5\u76f4\u63a5\u5e2e\u6211\u4eec\u5b9a\u4f4d<br \/>\n\u5230\u7a0b\u5e8f\u5d29\u6e83\u65f6\u6240\u5904\u7684\u4f4d\u7f6e(\u5728\u4f55\u5904\u5d29\u6e83)\u3002(codeproject\u4e0a\u5173\u4e8e\u8fd9\u4e2a\u4e13\u9898\u7684\u5e38\u89c1\u5f00\u573a\u767d = =#)<\/p>\n<p>\u8981\u83b7\u53d6call stack(\u6240\u8c13\u7684\u8c03\u7528\u5806\u6808)\uff0c\u5c31\u9700\u8981\u67e5\u770b(unwind)stack\u7684\u5185\u5bb9\u3002We could conceivably attempt to unwind the<br \/>\nstack ourselves using inline assembly. But stack frames can be organized in different ways, depending on compiler<br \/>\noptimizations and calling conventions, so it could become complicated to do it that way.(\u6458\u81eavld\u6587\u6863)\u8981\u83b7\u53d6\u6808\u7684<br \/>\n\u5185\u5bb9\uff0c\u6211\u4eec\u53ef\u4ee5\u81ea\u5df1\u4f7f\u7528\u5185\u8054\u6c47\u7f16\u83b7\u53d6\uff0c\u4f46\u662f\u8003\u8651\u5230\u517c\u5bb9\u6027\uff0c\u5185\u8054\u6c47\u7f16\u5e76\u4e0d\u662f\u4e00\u4e2a\u597d\u7684\u89e3\u51b3\u65b9\u6848\u3002\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u5fae\u8f6f\u7684dbghelp<br \/>\n\u4e2d\u7684StackWalk64\u6765\u83b7\u53d6\u6808\u7684\u5185\u5bb9\u3002<\/p>\n<p>StackWalk64\u58f0\u660e\u5982\u4e0b\uff1a<br \/>\nBOOL StackWalk64(<br \/>\nDWORD MachineType,<br \/>\nHANDLE hProcess,<br \/>\nHANDLE hThread,<br \/>\nLPSTACKFRAME64 StackFrame,<br \/>\nPVOID ContextRecord,<br \/>\nPREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,<br \/>\nPFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,<br \/>\nPGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,<br \/>\nPTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress<br \/>\n);<\/p>\n<p>\u5177\u4f53\u6bcf\u4e2a\u53c2\u6570\u7684\u542b\u4e49\u53ef\u4ee5\u53c2\u89c1MSDN\u3002\u8fd9\u91cc\u8bf4\u4e0bContextRecord\u53c2\u6570\uff0c\u8be5\u53c2\u6570\u6307\u5b9a\u4e86CPU\u5404\u4e2a\u5bc4\u5b58\u5668\u7684\u5185\u5bb9\u3002StackFrame\u6307\u5b9a\u4e86stack<br \/>\nframe\u7684\u5185\u5bb9\u3002stack frame\u662f\u4ec0\u4e48\uff0c\u6211\u4e5f\u4e0d\u77e5\u9053\u3002(= =) StackWalk64\u51fd\u6570\u9700\u8981\u7528\u6237\u6307\u5b9a\u5f53\u524dframe\u7684\u5730\u5740\uff0c\u4ee5\u53ca\u5f53\u524d\u7a0b\u5e8f\u7684\u6307\u4ee4<br \/>\n\u5730\u5740\u3002\u8fd9\u4e24\u4e2a\u4fe1\u606f\u90fd\u88ab\u586b\u5145\u8fdbContextRecord\uff0c\u7136\u540e\u4f20\u8fdbStackWalk64\u51fd\u6570\u3002<\/p>\n<p>\u90a3\u4e48\u5982\u4f55\u83b7\u53d6\u5f53\u524d\u7684stack frame\u5730\u5740\u548c\u5f53\u524d\u7a0b\u5e8f\u6307\u4ee4\u5730\u5740\u5462\uff1f\u5982\u524d\u6240\u8bf4\uff0c\u4f60\u53ef\u4ee5\u4f7f\u7528\u5185\u8054\u6c47\u7f16\u3002(\u5bf9\u4e8e\u7a0b\u5e8f\u6307\u4ee4\u5730\u5740\uff0c\u56e0\u4e3a\u8981\u83b7\u53d6<br \/>\nEIP\u5bc4\u5b58\u5668\u7684\u5185\u5bb9\uff0c\u800c\u8be5\u5bc4\u5b58\u5668\u4e0d\u80fd\u88ab\u8f6f\u4ef6\u8bbf\u95ee)\u4e5f\u53ef\u4ee5\u4f7f\u7528GetThreadContext\u4e00\u6b21\u6027\u83b7\u53d6\u5f53\u524d\u7ebf\u7a0b\u5f53\u524d\u8fd0\u884c\u60c5\u51b5\u4e0b\u7684CPU\u5404\u4e2a\u5bc4\u5b58\u5668<br \/>\n\u5185\u5bb9\u3002\u8865\u5145\u4e0b\uff0c\u5f53\u524dframe\u5730\u5740\u88ab\u653e\u5728EBP\u5bc4\u5b58\u5668\u91cc\uff0c\u5f53\u524d\u7a0b\u5e8f\u6307\u4ee4\u5730\u5740\u653e\u5728EIP\u5bc4\u5b58\u5668\u91cc\u3002\u4f46\u662f\uff0c\u5982\u540cMSDN\u5bf9GetThreadContext\u51fd\u6570<br \/>\n\u7684\u8bf4\u660e\u4e00\u6837\uff0c\u8be5\u51fd\u6570\u53ef\u80fd\u83b7\u53d6\u5230\u9519\u8bef\u7684\u5bc4\u5b58\u5668\u5185\u5bb9(You cannot get a valid context for a running thread)\u3002<\/p>\n<p>\u53e6\u4e00\u79cd\u83b7\u53d6Context(\u5305\u542bEBP and EIP)\u7684\u65b9\u6cd5\u5c31\u662f\u4f7f\u7528SEH(\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406)\uff0c\u5728__except\u4e2d\u4f7f\u7528GetExceptionInformation\u83b7\u53d6\u3002<\/p>\n<p>GetExceptionInformation \u4f20\u56de\u4e00\u4e2aLPEXCEPTION_POINTERS\u6307\u9488\uff0c\u8be5\u6307\u9488\u6307\u5411\u4e00\u4e2aEXCEPTION_POINTERS\u7ed3\u6784\uff0c\u8be5\u7ed3\u6784\u91cc\u5305\u542b\u4e00\u4e2a<br \/>\nContext\u7684\u6307\u9488\uff0c\u5373\u8fbe\u5230\u76ee\u6807\uff0c\u53ef\u4ee5\u4f7f\u7528StackWalk\u51fd\u6570\u3002<\/p>\n<p>\u8865\u5145\u4e00\u4e0b\uff0c\u4f60\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528StackWalk\u51fd\u6570\uff0cStackWalk\u88abdefine\u4e3aStackWalk64(windows\u5e73\u53f0\u76f8\u5173)\u3002<\/p>\n<p>unwind\u6808\u540e\uff0c\u53ef\u4ee5\u8fdb\u4e00\u6b65\u83b7\u53d6\u4e00\u4e2astack frame\u7684\u5185\u5bb9\uff0c\u4f8b\u5982\u51fd\u6570\u540d\u3002\u8fd9\u91cc\u6d89\u53ca\u5230SymFromAddr\u51fd\u6570\uff0c\u8be5\u51fd\u6570\u53ef\u4ee5\u6839\u636e\u4e00\u4e2a\u5730\u5740\u8fd4\u56de<br \/>\n\u7b26\u53f7\u540d(\u51fd\u6570\u540d)\u3002\u8fd8\u6709\u4e00\u4e2a\u6709\u610f\u601d\u7684\u51fd\u6570\uff1aSymGetLineFromAddr\uff0c\u53ef\u4ee5\u83b7\u53d6\u51fd\u6570\u5bf9\u5e94\u7684\u6e90\u4ee3\u7801\u7684\u6587\u4ef6\u540d\u548c\u884c\u53f7\u3002<\/p>\n<p>\u5f53\u7136\uff0c\u8fd9\u4e00\u5207\u90fd\u4f9d\u8d56\u4e8eVC\u4ea7\u751f\u7684\u7a0b\u5e8f\u6570\u636e\u5e93\u6587\u4ef6(pdb)\uff0c\u4ee5\u53ca\u63d0\u4f9b\u4ee5\u4e0aAPI\u51fd\u6570\u7684dbghelp.dll\u3002<\/p>\n<p>\u53c2\u8003\u4e00\u6bb5\u7b80\u5355\u7684\u4ee3\u7801\uff1a<\/p>\n<div><img decoding=\"async\" id=\"Codehighlighter1_0_11_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockStart.gif\" align=\"top\" \/><span id=\"Codehighlighter1_0_11_Open_Text\">\/\/\/<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\/\/\/<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockEnd.gif\" align=\"top\" \/>\/\/\/<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/>#include\u00a0&lt;windows.h&gt;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/>#include\u00a0&lt;stdio.h&gt;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/>#include\u00a0&lt;dbghelp.h&gt;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/>#pragma\u00a0comment(\u00a0lib,\u00a0&#8220;dbghelp.lib&#8221;\u00a0)<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/>void\u00a0dump_callstack(\u00a0CONTEXT\u00a0*context\u00a0)<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_153_1506_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockStart.gif\" align=\"top\" \/><span id=\"Codehighlighter1_153_1506_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0STACKFRAME\u00a0sf;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0memset(\u00a0&amp;sf,\u00a00,\u00a0sizeof(\u00a0STACKFRAME\u00a0)\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0sf.AddrPC.Offset\u00a0=\u00a0context-&gt;Eip;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0sf.AddrPC.Mode\u00a0=\u00a0AddrModeFlat;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0sf.AddrStack.Offset\u00a0=\u00a0context-&gt;Esp;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0sf.AddrStack.Mode\u00a0=\u00a0AddrModeFlat;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0sf.AddrFrame.Offset\u00a0=\u00a0context-&gt;Ebp;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0sf.AddrFrame.Mode\u00a0=\u00a0AddrModeFlat;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0DWORD\u00a0machineType\u00a0=\u00a0IMAGE_FILE_MACHINE_I386;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0HANDLE\u00a0hProcess\u00a0=\u00a0GetCurrentProcess();<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0HANDLE\u00a0hThread\u00a0=\u00a0GetCurrentThread();<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0for(\u00a0;\u00a0;\u00a0)<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_563_1504_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockStart.gif\" align=\"top\" \/>\u00a0<span id=\"Codehighlighter1_563_1504_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0if(\u00a0!StackWalk(machineType,\u00a0hProcess,\u00a0hThread,\u00a0&amp;sf,\u00a0context,\u00a00,\u00a0SymFunctionTableAccess,\u00a0SymGetModuleBase,\u00a00\u00a0)\u00a0)<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_681_695_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockStart.gif\" align=\"top\" \/>\u00a0\u00a0<span id=\"Codehighlighter1_681_695_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0\u00a0break;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockEnd.gif\" align=\"top\" \/>\u00a0\u00a0}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0if(\u00a0sf.AddrFrame.Offset\u00a0==\u00a00\u00a0)<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_733_747_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockStart.gif\" align=\"top\" \/>\u00a0\u00a0<span id=\"Codehighlighter1_733_747_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0\u00a0break;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockEnd.gif\" align=\"top\" \/>\u00a0\u00a0}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0BYTE\u00a0symbolBuffer[\u00a0sizeof(\u00a0SYMBOL_INFO\u00a0)\u00a0+\u00a01024\u00a0];<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0PSYMBOL_INFO\u00a0pSymbol\u00a0=\u00a0(\u00a0PSYMBOL_INFO\u00a0)\u00a0symbolBuffer;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0pSymbol-&gt;SizeOfStruct\u00a0=\u00a0sizeof(\u00a0symbolBuffer\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0pSymbol-&gt;MaxNameLen\u00a0=\u00a01024;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0DWORD64\u00a0symDisplacement\u00a0=\u00a00;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0if(\u00a0SymFromAddr(\u00a0hProcess,\u00a0sf.AddrPC.Offset,\u00a00,\u00a0pSymbol\u00a0)\u00a0)<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_1036_1088_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockStart.gif\" align=\"top\" \/>\u00a0\u00a0<span id=\"Codehighlighter1_1036_1088_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0\u00a0printf(\u00a0&#8220;Function\u00a0:\u00a0%s\\n&#8221;,\u00a0pSymbol-&gt;Name\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockEnd.gif\" align=\"top\" \/>\u00a0\u00a0}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0else<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_1099_1141_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockStart.gif\" align=\"top\" \/>\u00a0\u00a0<span id=\"Codehighlighter1_1099_1141_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0\u00a0printf(\u00a0&#8220;SymFromAdd\u00a0failed!\\n&#8221;\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockEnd.gif\" align=\"top\" \/>\u00a0\u00a0}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_1171_1195_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockStart.gif\" align=\"top\" \/>\u00a0\u00a0IMAGEHLP_LINE\u00a0lineInfo\u00a0=\u00a0<span id=\"Codehighlighter1_1171_1195_Open_Text\">{\u00a0sizeof(IMAGEHLP_LINE)\u00a0}<\/span>;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0DWORD\u00a0dwLineDisplacement;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0if(\u00a0SymGetLineFromAddr(\u00a0hProcess,\u00a0sf.AddrPC.Offset,\u00a0&amp;dwLineDisplacement,\u00a0&amp;lineInfo\u00a0)\u00a0)<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_1318_1440_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockStart.gif\" align=\"top\" \/>\u00a0\u00a0<span id=\"Codehighlighter1_1318_1440_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0\u00a0printf(\u00a0&#8220;[Source\u00a0File\u00a0:\u00a0%s]\\n&#8221;,\u00a0lineInfo.FileName\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0\u00a0printf(\u00a0&#8220;[Source\u00a0Line\u00a0:\u00a0%u]\\n&#8221;,\u00a0lineInfo.LineNumber\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockEnd.gif\" align=\"top\" \/>\u00a0\u00a0}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0else<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_1451_1501_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockStart.gif\" align=\"top\" \/>\u00a0\u00a0<span id=\"Codehighlighter1_1451_1501_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0\u00a0printf(\u00a0&#8220;SymGetLineFromAddr\u00a0failed!\\n&#8221;\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockEnd.gif\" align=\"top\" \/>\u00a0\u00a0}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockEnd.gif\" align=\"top\" \/>\u00a0}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockEnd.gif\" align=\"top\" \/>}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/>DWORD\u00a0excep_filter(\u00a0LPEXCEPTION_POINTERS\u00a0lpEP\u00a0)<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_1557_1841_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockStart.gif\" align=\"top\" \/><span id=\"Codehighlighter1_1557_1841_Open_Text\">{<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_1560_1580_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockStart.gif\" align=\"top\" \/>\u00a0<span id=\"Codehighlighter1_1560_1580_Open_Text\">\/\/\/\u00a0init\u00a0dbghelp.dll<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0if(\u00a0SymInitialize(\u00a0GetCurrentProcess(),\u00a0NULL,\u00a0TRUE\u00a0)\u00a0)<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_1638_1676_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockStart.gif\" align=\"top\" \/>\u00a0<span id=\"Codehighlighter1_1638_1676_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0printf(\u00a0&#8220;Init\u00a0dbghelp\u00a0ok.\\n&#8221;\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockEnd.gif\" align=\"top\" \/>\u00a0}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0dump_callstack(\u00a0lpEP-&gt;ContextRecord\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0if(\u00a0SymCleanup(\u00a0GetCurrentProcess()\u00a0)\u00a0)<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_1762_1803_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockStart.gif\" align=\"top\" \/>\u00a0<span id=\"Codehighlighter1_1762_1803_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0printf(\u00a0&#8220;Cleanup\u00a0dbghelp\u00a0ok.\\n&#8221;\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockEnd.gif\" align=\"top\" \/>\u00a0}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0return\u00a0EXCEPTION_EXECUTE_HANDLER;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockEnd.gif\" align=\"top\" \/>}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/>void\u00a0func1(\u00a0int\u00a0i\u00a0)<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_1864_1888_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockStart.gif\" align=\"top\" \/><span id=\"Codehighlighter1_1864_1888_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0int\u00a0*p\u00a0=\u00a00;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0*p\u00a0=\u00a0i;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockEnd.gif\" align=\"top\" \/>}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/>void\u00a0func2(\u00a0int\u00a0i\u00a0)<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_1911_1930_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockStart.gif\" align=\"top\" \/><span id=\"Codehighlighter1_1911_1930_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0func1(\u00a0i\u00a0&#8211;\u00a01\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockEnd.gif\" align=\"top\" \/>}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/>void\u00a0func3(\u00a0int\u00a0i\u00a0)<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_1953_1972_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockStart.gif\" align=\"top\" \/><span id=\"Codehighlighter1_1953_1972_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0func2(\u00a0i\u00a0&#8211;\u00a01\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockEnd.gif\" align=\"top\" \/>}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/>void\u00a0test(\u00a0int\u00a0i\u00a0)<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_1994_2013_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockStart.gif\" align=\"top\" \/><span id=\"Codehighlighter1_1994_2013_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0func3(\u00a0i\u00a0&#8211;\u00a01\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockEnd.gif\" align=\"top\" \/>}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/>int\u00a0main()<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_2027_2171_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockStart.gif\" align=\"top\" \/><span id=\"Codehighlighter1_2027_2171_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0__try<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_2037_2054_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockStart.gif\" align=\"top\" \/>\u00a0<span id=\"Codehighlighter1_2037_2054_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0test(\u00a010\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockEnd.gif\" align=\"top\" \/>\u00a0}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0__except(\u00a0excep_filter(\u00a0GetExceptionInformation()\u00a0)\u00a0)<br \/>\n<img decoding=\"async\" id=\"Codehighlighter1_2112_2157_Open_Image\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockStart.gif\" align=\"top\" \/>\u00a0<span id=\"Codehighlighter1_2112_2157_Open_Text\">{<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0\u00a0printf(\u00a0&#8220;Some\u00a0exception\u00a0occures.\\n&#8221;\u00a0);<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedSubBlockEnd.gif\" align=\"top\" \/>\u00a0}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/InBlock.gif\" align=\"top\" \/>\u00a0return\u00a00;<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/ExpandedBlockEnd.gif\" align=\"top\" \/>}<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/www.cppblog.com\/Images\/OutliningIndicators\/None.gif\" align=\"top\" \/><\/div>\n<p>\u4ee5\u4e0a\u4ee3\u7801\u5728release\u6a21\u5f0f\u4e0b\u9700\u8981\u5173\u6389\u4f18\u5316\uff0c\u5426\u5219\u8c03\u7528\u5806\u6808\u663e\u793a\u4e0d\u6b63\u786e(\u67d0\u4e9b\u51fd\u6570\u88ab\u53bb\u6389\u4e86?)\uff0c\u540c\u65f6\u9700\u8981pdb\u6587\u4ef6\u3002<\/p>\n<p><span style=\"font-size: small;\">\u53c2\u8003\u8d44\u6599\uff1a<br \/>\n<a href=\"http:\/\/www.codeproject.com\/KB\/threads\/StackWalker.aspx\">http:\/\/www.codeproject.com\/KB\/threads\/StackWalker.aspx<\/a><br \/>\n<a href=\"http:\/\/www.cnblogs.com\/protalfox\/articles\/84723.html\">http:\/\/www.cnblogs.com\/protalfox\/articles\/84723.html<\/a><br \/>\n<a href=\"http:\/\/www.codeproject.com\/KB\/debug\/XCrashReportPt1.aspx\">http:\/\/www.codeproject.com\/KB\/debug\/XCrashReportPt1.aspx<\/a><br \/>\n<a href=\"http:\/\/www.codeproject.com\/KB\/applications\/visualleakdetector.aspx\">http:\/\/www.codeproject.com\/KB\/applications\/visualleakdetector.aspx<\/a><\/p>\n<p>ps,\u672c\u6587\u6280\u672f\u6d45\u5c1d\u8f84\u6b62\uff0c\u90e8\u5206\u5185\u5bb9\u662f\u5426\u5b8c\u5168\u51c6\u786e(\u6b63\u786e)\u6211\u4e2a\u4eba\u90fd\u6301\u4fdd\u7559\u6001\u5ea6\uff0c\u4ec5\u4f9b\u53c2\u8003\u3002:D<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u539f\u6587\u5730\u5740 &nbsp; Author :<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[],"tags":[119],"class_list":["post-4805","post","type-post","status-publish","format-standard","hentry","tag-03-"],"_links":{"self":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/4805","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/comments?post=4805"}],"version-history":[{"count":0,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/4805\/revisions"}],"wp:attachment":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/media?parent=4805"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/categories?post=4805"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/tags?post=4805"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}