当前位置: 首页 > news >正文

网站建设cz35wordpress4.9标签404

网站建设cz35,wordpress4.9标签404,图书馆网站的建设的重要性,看网站建设公司的网站案例如果你还不清楚什么是转储文件#xff0c;不知道什么时候需要转储文件#xff0c;请参考转储文件系列文章的第一篇 —— 转储文件知多少。前言 我在 你需要知道的 N 种抓取 dump 的工具 的工具 这篇文章里#xff0c;向大家介绍了几款可以抓取转储文件的工具及其简单用法。不… 如果你还不清楚什么是转储文件不知道什么时候需要转储文件请参考转储文件系列文章的第一篇 —— 转储文件知多少。前言 我在 你需要知道的 N 种抓取 dump 的工具 的工具 这篇文章里向大家介绍了几款可以抓取转储文件的工具及其简单用法。不知道大家是否还记得以管理员权限运行 procdump -i 可以注册 procdump 为事后调试器。大家是否了解其实现原理今天让我们一起揭开其神秘面纱。约定 JIT Debugger Just In Time DebuggerJIT 调试器 Postmortem Debugger事后调试器指的是同一个概念 —— 事后调试器。如果把 Debugger 换成 Debugging表示事后调试。我有时候会说 JIT 调试器有时候会说事后调试器希望大家不要被我混乱的用词搞晕。原理探究 运行 process monitor开启监视。然后以管理员权限执行 procdump.exe -i成功后停止监视。为了方便大家我特意录制了整个过程感兴趣的小伙伴可以点开看看不过我建议你亲自动手实战一番毕竟 纸上来的终觉浅 绝知此事要躬行。探究 procdump 安装为 JIT 调试器的过程如果你没看视频可以直接参考我过滤后的结果截图保留Result是 Success 的 注册表 写 事件排除非注册表相关事件我用黄色和红色高亮了 procdump 操作的注册表项。你能从图中得出什么结论呢procdump 会同时写 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug 和 HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug 注册表项。相信有开发经验的小伙伴儿知道在64 位系统下部分注册表项有两套一套是供 64 位进程使用的黄色高亮部分一套是供 32 位进程使用的红色高亮部分带 Wow6432Node。如果 AeDebug下的 Auto 子项和 Debugger 子项有值procdump 会先备份再修改。执行 procdump -u 的时候会恢复系统原有设置Auto 和 Debugger 的数据类型都是 REG_SZ。虽然我们看到 Auto 的值是 1我猜32 位进程崩溃的时候会使用带 Wow6432Node 的注册表项64 位进程崩溃的时候会使用不带 Wow6432Node 的注册表项。真的是这样吗你知道怎么验证吗相信聪明的你一定能想出验证办法。其实以上结论在 procdump -i 的输出结果中已经给出提示了除了备份操作。注意看下图中的黄色和红色高亮的部分。procdump-i温馨提示某些杀毒软件可能会对此注册表项有保护如果设置失败请检查是否是杀毒软件导致的。至此我们知道 procdump 是通过设置 AeDebug下的 Auto 和 Debugger 子项实现的 JIT Debugging。那么这两项都有什么用呢AeDebug 探究 使用 google 搜索 AeDebug搜到了微软的官方说明[1] 有兴趣的小伙伴一定要读一读有很多有价值的信息。Auto 项指定是否向用户显示错误提示框如果值为 0则显示提示框。为 1 则不显示提示框直接附加注册的事后调试器到目标进程中。Debugger 项指定事后调试器的路径及传递给事后调试器的参数。我们发现 procdump -i 设置的参数是 -accepteula -j E:\dumps %ld %ld %p。其中-accepteula 表示接受用户协议。-j 表示参数中有指向 JIT_DEBUG_INFO 的指针父进程传递了 %p 对应的内容。E:\dumps 表示转储文件保存的路径如果运行 procdump -i 的时候没有指定转储文件的保存路径默认会取当前路径 。第一个 %ld 表示目标进程的进程 ID。第二个 %ld 表示事件句柄。这个事件句柄是 WER 复制到事后调试器中的。如果事后调试器激活该事件通过 SetEvent()后WER 将继续目标进程的执行而无需等待事后调试器终止。如果事后调试器在没有激活该事件的情况下终止WER 将继续收集关于目标进程的信息。%p 指向目标进程空间中的 JIT_DEBUG_INFO 结构指针。包含了异常的来源和与异常相关的上下文信息。如果转储文件中保存了 JIT_DEBUG_INFO使用 windbg 调试时可以通过 .jdinfo address 来查看异常发生时的信息。例如使用 windbg 打开 procdump 保存的转储文件的时候应该可以看到如下提示。procdump 在转储文件中添加的注释我们可以根据提示输入.jdinfo 0x1afd59e0000 来查看异常来源及上下文信息。jdinfo 结果说明在运行 procdump -i 的时候如果没有指定转储选项会默认使用 -mm 选项。该选项只包含 Process, Thread, Module, Handle and Address Space info. 信息不会包含 %p 对应的内存数据。如果我们在调试 使用 -mm 选项保存的转储文件的时候执行 .jdinfo address会得到如下错误Unable to process JIT_DEBUG_INFO, Win32 error 0n30我们可以简单的通过指定 -ma 或 -mp来生成包含内存数据的转储文件这样我们在调试器里执行 .jdinfo address的时候就不会报错了。据我观察对于 procdump 来说 -j和 %p 选项需要同时传递缺一不可。排除进程 如果我们真的不想让某些进程出现未处理异常的时候中断到 JIT 调试器中有没有办法呢从 vista 开始我们可以显示排除某些进程不让这些进程在出现未处理异常的时候中断到 JIT 调试器中。对应的注册表项如下HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\AutoExclusionList下面是我机器上的该注册表项的值Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\AutoExclusionList] DWM.exedword:00000001 demo.exedword:00000001 上面的 demo.exe 是我为了测试手动添加的而 DWM.exe 是系统添加的。windows 为什么要默认把 DWM.exe 添加到排除列表呢我也不太清楚不过我在 Excluding an Application from Automatic Debugging[2] 看到这样一句话By default, the Desktop Window Manager (Dwm.exe) is excluded from automatic debugging because otherwise a system deadlock can occur if Dwm.exe stops responding (the user cannot see the interface displayed by the debugger because Dwm.exe isnt responding, and Dwm.exe cannot terminate because it is held by the debugger).我想这就是 DWM.exe 会被排除的原因吧。如果想通过代码的形式实现除了直接操作注册表外还可以通过 WerAddExcludedApplication() 来实现对应的可以通过 WerRemoveExcludedApplication() 来删除 。这两个函数的原型摘录如下HRESULT WerAddExcludedApplication(PCWSTR pwzExeName,BOOL bAllUsers );HRESULT WerRemoveExcludedApplication(PCWSTR pwzExeName,BOOL bAllUsers ); 第一个参数 pwzExeName 表示要排除的程序不要带路径只传递程序名称即可。比如demo.exe。第二个参数 bAllUsers 如果是 FALSE 的话表示仅对当前用户有效其它用户不受影响修改的是 HKCU HKEY_CURRENT_USER下对应的注册表项。如果为 TRUE 的话表示对所有用户都生效修改的是 HKLM HKEY_LOCAL_MACHINE下对应的注册表项为 TRUE 的时候需要有管理员权限。注意如果你手动调用代码操作注册表的话务必注意 64 位系统下的注册表重定向问题。相信一定有小伙伴儿和我一样踩过这个坑。JIT 调试的运作机制 整个运作机制在张银奎张老师的《软件调试》第一版第 12 章未处理异常和 JIT 调试 中做了非常非常详细的介绍。我就不摘录了感兴趣的小伙伴一定要好好多读几遍。AeDebug 中的 Ae 是什么意思 AeDebug中的 Debug 很好理解就是调试的意思。那 Ae 代表什么意义呢有人说 AeDebug 是 Auto Exception Debug 的缩写听上去挺有道理的。偶然的机会google 到了 Ramond Chen写的一篇文章 —— What does the “Ae” stand for in AeDebug?[3]。根据他的说法Ae 表示 Application Error 的意思。我把原文截取如下方便大家阅读。Raymond-Chen-explain-AE知道 AeDebug 是什么单词的缩写有助于帮助大家记忆但没必要纠结。总结 一般情况下修改 HKLM 下的注册表项需要管理员权限。注册为 JIT 调试器需要管理员权限因为需要写 HKLM 下的子键。procdump 可以通过 -i 选项注册为事后调试器另外 windbg也可以通过 -I 选项注册为事后调试器。AeDebug 注册表项是 JIT 调试的关键该注册项在 64 位系统下有对 32 位进程和 64 位进程分别有对应的注册表项。其中带 Wow6432Node 的注册表项是给 32 位目标进程使用的。64位系统下除了AeDebug有两套还有很多其它注册表项也有两套。如果确实不希望自己的进程在出现未处理异常时中断到 JIT 调试器中可以设置注册表进行排除Vista 及之后的操作系统才支持。参考资料 《windows sysinternals 实战指南》《软件调试》第一版Microsoft Document : Enabling Postmortem Debugging[4]Raymond-Chen : What does the “Ae” stand for in AeDebug?[5]Configuring Automatic Debugging[6]WerAddExcludedApplication[7]WerRemoveExcludedApplication[8]References:[1]微软的官方说明: https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/enabling-postmortem-debugging[2]Excluding an Application from Automatic Debugging: https://docs.microsoft.com/en-us/windows/win32/debug/configuring-automatic-debugging#excluding-an-application-from-automatic-debugging[3]What does the “Ae” stand for in AeDebug?: https://devblogs.microsoft.com/oldnewthing/20181017-00/?p99995[4]Microsoft Document : Enabling Postmortem Debugging: https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/enabling-postmortem-debugging[5]Raymond-Chen : What does the “Ae” stand for in AeDebug?: https://devblogs.microsoft.com/oldnewthing/20181017-00/?p99995[6]Configuring Automatic Debugging: https://docs.microsoft.com/en-us/windows/win32/debug/configuring-automatic-debugging#configuring-automatic-debugging-for-application-crashes[7]WerAddExcludedApplication: https://docs.microsoft.com/en-us/windows/win32/api/werapi/nf-werapi-weraddexcludedapplication[8]WerRemoveExcludedApplication: https://docs.microsoft.com/en-us/windows/win32/api/werapi/nf-werapi-werremoveexcludedapplication猜你喜欢转储文件系列转储文件知多少你需要知道的 N 种抓取 dump 的工具你生成的转储文件有问题吗调试系列调试实战——你知道怎么使用DebugView查看调试信息吗调试实战——程序CPU占用率飙升你知道如何快速定位吗调试实战——崩溃在ComFriendlyWaitMtaThreadProc调试实战——使用windbg调试崩溃在ole32!CStdMarshal::DisconnectSrvIPIDs调试实战——调试PInvoke导致的内存破坏调试实战——调试excel启动时死锁调试实战——调试DLL卸载时的死锁调试实战——调试TerminateThread导致的死锁排错系列排错实战——VS清空最近打开的工程记录排错实战——拯救加载调试符号失败的IDA排错实战——你知道拖动窗口时只显示虚框怎么设置吗排错实战——解决Tekla通过.tsep安装插件失败的问题排错实战——使用process explorer替换任务管理器排错实战——通过对比分析sysinternals事件修复程序功能异常欢迎留言交流
http://www.yutouwan.com/news/464515/

相关文章:

  • 汕头网页网站制作在线修图网站
  • 做标书的网站厦门seo排名
  • 免费做简历的软件网站专门做搜索种子的网站有哪些
  • 医院网站建设投标要求知名网站定制报价
  • 临沂网站制作费用上海公司注册流程和费用
  • 免费网站制作效果连云港建设工程质量监督站网站
  • thinkphp 网站根目录地址德阳网站优化
  • 怎么用织梦做网站前台网站免费维护期是多少
  • 公司做网站的好处叫别人做网站安全吗
  • 网站单个页面网络策划是什么
  • 湘潭电大网站网络营销的推广策略
  • 招聘网站设计师要求广州网站建设推广公司哪家好
  • 长宁网站推广公司提供手机网站建设
  • wordpress打不开后台青岛seo代理计费
  • 怎么用二维动画做网站首页步骤企业培训课程种类
  • 余姚网站制作建网站制作
  • 网站top排行榜工业设计公司怎么接活
  • 阿里云商业网站建设视频长沙app软件制作
  • 兰州网站建设和推广网站建设教程网
  • 数码产品网站建设策划书东莞最好的网络公司找火速
  • 网站注册系统源码制作一个网页的教程
  • 响应网站怎么做教学视频上海集团有限公司
  • 查网站有没有做推广百度在线
  • 模板建站流程电子商务网站 注意
  • ps做字幕模板下载网站企业服务器
  • 网站建设项目技术公司官网首页设计
  • 门户网站免费建站站群软件
  • 网站建设的公司有哪些怎样做o2o网站
  • 网站建设需要会什么开发公司各部门岗位职责
  • 台州椒江网站制作公司模板网站与定制网站的价格