充值网站制作,邯郸移动网站制作,做网站是怎么回事,odoo 网站开发导读#xff1a; LeakDiag是一个在内存泄漏过程中使用的工具#xff0c;可以用来精确地找到内存泄露一直到代码行。LeakDiag拦截指定内存分配的调用并跟踪各种调用栈#xff0c;它报告已分配但尚未释放的内存#xff0c;这一信息允许一个人排除一个内存泄露问题#xff0c…导读 LeakDiag是一个在内存泄漏过程中使用的工具可以用来精确地找到内存泄露一直到代码行。LeakDiag拦截指定内存分配的调用并跟踪各种调用栈它报告已分配但尚未释放的内存这一信息允许一个人排除一个内存泄露问题以精确查看哪些组件进行了该分配。使用正确的调试符号甚至请求分配的代码行能看见。它使用微软的Detours技术①。 LeakDiag支持5种不同的分配 l 虚拟分配 l 堆分配[默认] l 线程局部存储Thread Local StorageTLS指允许一个进程的多个线程存储每个线程所独有的数据的一种Win32机制分配 l COM分配外部和内部 l C运行时分配 Debugging Tools for Windows是一个全面的免费包它包含强大的调试和帮助开发者在他们的日常工作变得更有效率的工具。 该包中的部分工具列表 映像 说明 agestore.exe 方便的文件删除工具根据上次访问日期删除文件。 cdb.exe 基于控制台的用户模式调试程序。几乎完全跟NTSD相同。 dbengprx.exe 轻量级代理服务器中继两个不同的计算机之间的数据。 dbgrpc.exe 用于查询并显示微软远程过程调用(RPC)信息的工具。 dbgsrv.exe 用于远程调试的进程服务器。 dumpchk.exe 用于验证内存转储文件的工具。 gflags.exe 用于启用和禁用系统检测的配置工具。 kd.exe 内核模式下的调试程序。 kdbgctrl.exe 用于控制和配置一个内核模式下调试连接的工具。 kdsrv.exe 连接服务器在内核模式下调试使用。 kill.exe 基于控制台的工具来终止进程。 logger.exe 此工具记录的一个进程如函数调用活动。 logviewer.exe 此工具用于查看logger.exe生成的日志文件。 ntsd.exe 基于控制台的用户模式调试程序。几乎完全跟CDB相同。 remote.exe 用于远程控制控制台程序的工具。 rtlist.exe 远程进程列表查看器。 symchk.exe 用于验证符号文件或从符号服务器下载符号文件的工具。 symstore.exe 用于创建和维护符号存储区的工具。 tlist.exe 此工具列出所有正在运行的进程。 umdh.exe 此工具用于进行内存泄漏检测。 windbg.exe 用户模式和内核模式调试器使用图形用户界面。 UMDH是另一种形式的内存泄漏检测工具是Debugging Tools for Windows一部分它包括LeakDiag功能的一个子集。LeakDiag能够从各种分配跟踪内存然而UMDH只能够跟踪来自堆管理器的内存。此外它要求用户模式栈跟踪在操作系统中被启用。 Microsoft Application Verifier是一个运行时对非托管代码的验证工具来帮助查找细微的编程错误这些错误可能很难确认一般应用程序测试。 Global Flags应用程序gflags.exe是Debugging Tools for Windows一部分是为所有可能选项的一站式配置工具。 Process Explorer是最容易被描述为Windows任务管理器一个强大替代。它提供有关所有当前运行在系统上进程的详细信息能非常直观地显示新创建/终止的进程。 Process Monitor是一个Windows高级监控工具能显示实时文件系统、注册和进程/线程活动。 Microsoft Spy是Visual Studio工具中的一个提供系统进程、线程、窗口和窗口消息的图形视图能帮助查看窗口属性、相互关系查找出错进程记录窗口消息传递。 Windows Driver Kits(WDK) 是一个功能强大和完整的构建环境可用于生产开发。此开发环境是真正了不起因为它包含了大量的功能强大的开发工具包括编译器和连接器并免费提供来自微软。 Ethereal是一个功能强大、开源的网络协议分析工具可用于帮助解决跨计算机调用故障。Ethereal可以让你捕捉和分析来自一个实时网络的数据或分析以前创建的捕获文件。 DebugDiag是IIS诊断工具包的一部分最初设计为帮助分析IIS性能问题但它同样可以很好用于任何进程。它有下列特性 l 进程崩溃/挂起数据收集附加到一个进程并在崩裂或异常发生时生成转储文件。 l 内存泄漏将一个DLL注入到要监视的进程为泄漏和监视随着时间推移的内存分配。 l 一个功能强大的可扩展对象模型 (基于COM)这个出现信息需要分析内存泄漏和进程崩溃/挂起。 调试的两种基本类型为用户态User ModeUM和内核态Kernel Mode调试。 用户态调试能够审查程序状态运行的线程内存内容寄存器和开在进程空间的内核对象代表调试目标。用户态调试也有能力改变状态改变线程执行秩序改变寄存器的内容并改变存储器内容和同时被通知发生在目标进程里的特别事件。用户态调试也可以审查一个包含给定进程快照的转储文件也被称为事后调试。Debugging Tools for Windows带有3个基本用户态调试器cdb.exentsd.exe和windbg.exe。所有这三个能够调试控制台应用程序以及图形化Windows程序。如果有源码或直接机器级调试所有这三个可用于执行源代码级调试。 l cdb.exeCDB是一个基于字符的控制台程序它能低层次分析Windows用户模式内存和构造它对调试一个当前正在运行或最近崩溃的程序极为强大它能附着运行在早期启动阶段如WinLogon或CSRSS的重要子系统进程而图形调试器不工作在启动进程早期因为图形子系统尚未初始化。如果目标应用程序是一个控制台程序目标将与CDB共享控制台窗口。命令行下用cdb –p 或者cdb –pn 或者cdb –psn 调用用tlist.exe找出进程ID。 l ntsd.exeNTSD在各个方面等同于CDB除了当启动时它会产生一个新的文本窗口。更确切说CDB是一个控制台应用程序而NTSD是一个图形用户界面应用程序它可以创建子集的控制台。像CDBNTSD完全有能力调试控制台应用程序和图形Windows程序唯一依次它们不能相互替代是在你调试一个用户态系统集成时在这种情况下进程内的错误或中断可能会导致所有的控制台应用程序工作不正常这时可以配置NTSD来运行它根本没有控制台。ntsd.exe已从Windows Vista及以后系统中移除。 l windbg.exewindbg是一个强大的图形界面调试器它带有同控制台模式调试器的调试能力增强了自动化例行任务如审查当前调用栈查看变量包括C对象显示当前寄存器当符号文件合适设置时它能进行源码级调试。调试期WinDbg工作区的设置能被更改和保存所有这些能力使WinDbg称为交互式调试用户态应用程序首选工具。 内核调试器可以把电脑系统作为一个整体来调查, 每个进程或线程只是数据结构的一个收集内存地址跟装在系统上的物理内存有直接关系并且分页出的内存不可访问如果没有加载它进物理内存。内核态调试可以改变整个计算机状态并可被特殊事件通知这被称为实时内核调试。内核调试器主要用于设备驱动程序开发者但当调试用户态应用程序时同样也能非常有用。内核调试器能调试运行一个不同于主机平台的目标计算机调试器会自动侦测目标机正运行的平台。Debugging Tools for Windows带有2个基本内核调试器kd.exe和windbg.exe。 l kd.exeKD是内核态基于字符的调试器。它能深入分析Windows上内核态活动并可以被用来调试内核态程序和驱动调试用户态应用程序或监视操作系统自身行为。 l windbg.exewindbg也能进行内核态调试。WinDbg提供了对Windows内核、内核态驱动和运行在该系统上的用户态应用程序的全部代码级调试。它允许你调试任何应用程序或内核模块以一种友好的用户界面靠跟踪源码、设置基于源内容的断点等等。 每个基于NT操作系统有两种不同的程序生成模式即Free Build(或Retail Build)和Checked Build (或Debug Build) ②。 一般符号文件包含 l 全局变量名和地址 l 函数名它们的地址和它们的签名 l FPOFrame Pointer Omission)③数据 l 局部变量名和地址 l 符号对应的源文件路径和行数 l 变量结构等的类型信息 出于各种原因微软使用了几种符号格式通用对象文件格式Common Object File FormatCOFF如VC生成的目标文件.objCodeView format (CV)Program Database format (PDB)是用于保存调试和项目状态信息的文件通常用Microsoft Visual Studio 进行debug的时候将产生pdb文件调试的时候默认放在和对应应用程序集相同目录。 注意从官网下载Symbol 包到目录downsym后windbg中设置_NT_SYMBOL_PATH一定要是srv*downsym*http://msdl.microsoft.com/download/symbols让windbg自动下载匹配symbols。 处理器使用由一个栈寄存器控制的栈存储区来记录返回地址这里执行必须继续当完成当前函数调用后。x86处理器栈始终向下增长从高地址向低地址占用它被存储靠名为esp的栈指针寄存器。 【注】 ①. Detours是一个可以在x86,x64,和IA64平台上测试任意Win32函数的程序库可在http://www.microsoft.com/china/CRD/intellectualproperty/Technology_View.aspx?id38免费获得Detours可以通过为目标函数重写在内存中的代码从而拦截win32函数这个过程发生在运行时而且并不持久Detours软件包还可以将任意的dll和数据片段(称之为有效载荷)注入到任意的win32二进制文件当中。 ②. Free Build生成的是最终用户版本针对生成的二进制文件进行了彻底的优化禁用了调试断言并剥离了调试信息。这样一来使可执行程序文件更小加载更快使用的内存也更小。Checked Build 生成的是测试和调试版本。它包含额外的Free Build所没有的错误检查参数验证和调试信息,Checked Build有助于隔离和跟踪可能导致不可预见的行为的问题比如内存溢出不正确的设备配置。虽然Checked Build提供了额外的保护但与Free Build比较它需要更多的内存开销和磁盘空间。由于可执行程序包含符号调试信息调试时要执行附加的代码、参数检查和输出调试诊断信息从而导致性能下降。 ③. Frame Pointer主要用作在调用栈中存放函数的基址用寄存器ebp。发生函数调用时首先将函数参数arguments入栈而后执行调用call指令将返回地址(return address)入栈再进入函数执行第一个指令将调用者基指ebp入栈然后把栈指针指向刚入栈的调用者基指赋值给寄存器ebp然后esp自减空出栈空间容纳函数的局部变量先将定义的局部变量入栈调用完后自动将这些局部变量出栈然后将函数返回值放入eax最后出栈恢复调用者基指ebp。FPO优化使得没有符号几乎不可能调试程序因此FPO在Windows XP SP2及其以后的操作系统中没被使用。 【资源】 Microsoft Portable Executable and Common Object File Format Specification、v8中文版 Playing with the stack Checked and Free Build Differences WinDbg / SOS Cheat Sheet 本文转自 http://fafeng.blogbus.com/logs/16115292.html