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

长沙正规企业网站制作平台浅笑云虚拟主机

长沙正规企业网站制作平台,浅笑云虚拟主机,网站建设座谈会,可以做哪些网站时间旅行调试(TTD)允许用户记录跟踪#xff0c;这些跟踪是对程序执行的记录。时间线是执行过程中发生的事件的直观表示#xff0c;这些事件可以是包括断点#xff0c;内存读/写#xff0c;函数调用和返回以及异常。使用时间线窗口可以快速查看重要事件#xff0c;了解相对… 时间旅行调试(TTD)允许用户记录跟踪这些跟踪是对程序执行的记录。时间线是执行过程中发生的事件的直观表示这些事件可以是包括断点内存读/写函数调用和返回以及异常。使用时间线窗口可以快速查看重要事件了解相对位置并轻松跳转到它们在TTD跟踪文件中的位置使用多个时间线以可视方式探索时间旅行轨迹中的事件并发现事件相关性。打开TTD跟踪文件时将显示时间线窗口并显示关键事件而无需手动创建数据模型查询。同时所有时间旅行对象均可用以允许进行更复杂的数据查询。有关创建和使用时间旅行跟踪文件的更多信息请点此查看。时间线类型时间线窗口可以显示以下事件1.异常(你可以进一步过滤特定的异常代码)2.断点(添加断点时也会自动添加断点的时间线)3.函数调用(以module!function形式搜索)4.内存访问(在两个内存地址之间进行读/写/执行)将鼠标停在每个事件上通过工具提示获取更多信息。点击事件将运行事件查询并显示更多信息双击事件将跳至TTD跟踪文件中的该位置。异常当你加载跟踪文件并且时间线处于活动状态时它将自动显示记录中的任何异常。当你将鼠标悬停在断点上时将显示诸如异常类型和异常代码之类的信息。你可以使用可选的异常代码字段进一步过滤特定的异常代码你还可以为特定的异常类型添加新的时间线。断点添加断点后会将断点的时间线自动添加到时间线。例如可以使用bp Set Breakpoint命令完成此操作。当你将鼠标悬停在断点上时将显示地址和与断点关联的指令指针。清除断点后关联的断点时间线将自动删除。函数调用你可以在时间线上显示函数调用的位置。为此就要以module!function的形式提供搜索例如TimelineTestCode!multiplyTwo。你还可以指定通配符例如TimelineTestCode!m*。将鼠标悬停在函数上时将显示函数名称、输入参数及其值和返回值。此示例显示缓冲区和大小因为这些是DisplayGreeting!GetCppConGreeting的参数。内存访问使用内存访问时间线显示何时已读取或写入特定范围的内存或在何处执行了代码。起始地址和终止地址用于定义两个存储器地址之间的范围。将鼠标悬停在内存访问项上时将显示值和指令指针。使用时间线当将鼠标悬停在时间线上时一条垂直的灰色线将跟随鼠标蓝色竖线表示跟踪中的当前位置点击放大镜图标可放大和缩小时间线。在顶部时间线控制区域中使用矩形来平移时间线的视图。拖动矩形的外部定界符以调整当前时间线视图的大小。鼠标移动使用Ctrl 滚轮放大和缩小使用Shift 滚轮可左右滚动。时间线调试技术为了演示调试时间线技术此处重用了“时间旅行调试演练(Time Travel Debugging Walkthrough)”。本演示假设你已经完成了构建样例代码的前两个步骤并使用前面描述的前两个步骤创建了TTD记录。第1部分构建示例代码第二部分记录“DisplayGreeting”示例的踪迹在本示例中第一步是在时间旅行跟踪中查找异常这可以通过双击时间线上唯一的异常来实现。在命令窗口中我们看到点击异常时发出了以下命令。 (2dcc.6600): Break instruction exception - code 80000003 (first/second chance not available)Time Travel Position: CC:0$curprocess.TTD.Events.Where(t t.Type Exception)[0x0].Position.SeekTo()选择查看寄存器以在时间线上显示寄存器开始我们的调查。在命令输出中请注意堆栈(esp)和基本指针(ebp)指向两个截然不同的地址。这可能表明堆栈已损坏可能是返回的函数损坏了堆栈。为了验证这一点我们需要返回到CPU状态被损坏之前的状态并查看是否可以确定何时发生堆栈损坏。在此过程中我们将检查局部变量和堆栈的值。选择查看当地以显示本地值选择查看堆栈以显示代码执行堆栈。在跟踪失败时通常会在错误处理代码的真正原因之后结束几个步骤。通过时间旅行我们可以一次返回一条指令找出真正的根本原因。从主页功能区中使用“后退一步”命令后退三步指令。执行此操作时请继续检查堆栈本地变量和注册窗口。当你使用“后退一步”命令后命令窗口将显示时间行进位置和寄存器。0:000 t-Time Travel Position: CB:41eax00000000 ebx00564000 ecxc0d21d62 edx7a1e4a6c esi00061299 edi00061299eip00540020 esp003cf7d0 ebp00520055 iopl0         nv up ei pl zr na pe nccs0023  ss002b  ds002b  es002b  fs0053  gs002b             efl0000024600540020 ??              ???0:000 t-Time Travel Position: CB:40eax00000000 ebx00564000 ecxc0d21d62 edx7a1e4a6c esi00061299 edi00061299eip00061767 esp003cf7cc ebp00520055 iopl0         nv up ei pl zr na pe nccs0023  ss002b  ds002b  es002b  fs0053  gs002b             efl00000246DisplayGreeting!main0x57:00061767 c3              ret0:000 t-Time Travel Position: CB:3Aeax0000004c ebx00564000 ecxc0d21d62 edx7a1e4a6c esi00061299 edi00061299eip0006175f esp003cf718 ebp003cf7c8 iopl0         nv up ei pl nz na pe nccs0023  ss002b  ds002b  es002b  fs0053  gs002b             efl00000206DisplayGreeting!main0x4f:0006175f 33c0            xor     eax,eax在跟踪时我们的堆栈和基本指针具有更有意义的值因此看来我们越来越接近代码中发生损坏的位置。 esp003cf718 ebp003cf7c8另一个有趣的地方是本地窗口包含来自我们的目标应用程序的值而源代码窗口则高亮显示在跟踪中的源代码中准备执行的代码行。为了进一步研究我们可以打开一个内存窗口来查看堆栈指针(esp)内存地址附近的内容。在此示例中其值为003cf7c8。选择内存文本 ASCII以显示存储在该地址的ASCII文本。内存访问时间线确定了感兴趣的内存位置后使用该值添加内存访问时间线。点击添加时间线然后填写起始地址。我们将查看4个字节因此将其添加到003cf7c8的起始地址中即得到003cf7cb。默认设置是查看所有内存写入但是你也可以仅查看该地址处的写入或代码执行。现在我们可以反向遍历时间线以检查这段时间在此行的跟踪记录的哪一点被写入以查看可以找到的内容。点击时间线上的此位置我们看到本地人为要复制的字符串取不同的值。目标值似乎不完整好像我们的字符串长度不正确。断点时间线使用断点是在某些情况下暂停代码执行的常用方法TTD允许你设置一个断点并及时返回直到在记录跟踪之后找到该断点为止。在问题发生后检查过程状态确定断点的最佳位置的能力启用了TTD特有的其他调试工作流。要探索替代的时间线调试技术请点击时间线中的异常然后使用Home功能区上的“后退一步”命令再次前进三步。在这个示例中仅查看代码将非常容易但是如果有数百行代码和数十个子例程则可以使用此处描述的技术来减少定位问题所需的时间。如前所述基本指针(esp)并非指向指令而是指向我们的消息文本。使用ba命令在内存访问上设置断点我们将设置一个w - write断点以查看何时写入此内存区域。 0:000 ba w4 003cf7c8尽管我们将使用简单的内存访问断点但可以将断点构造为更复杂的条件语句。有关更多信息请参见bpbubm(设置断点)。从“主页”菜单中选择“返回”以返回到断点之前的时间。此时我们可以检查程序堆栈以查看哪些代码处于活动状态。由于Microsoft提供的wscpy_s()函数不太可能出现这样的代码错误因此我们在堆栈中进行了进一步的研究。堆栈显示Greetingmain调用GreetingGetCppConGreeting。在这个非常小的代码示例中我们可以在此时打开代码并且很容易发现错误。但是为了说明可以用于更大、更复杂的程序的技术为此我们将设置添加一个函数调用时间线。        函数调用时间线点击添加时间线然后填写DisplayGreetingGetCppConGreeting作为函数搜索字符串。“开始”和“结束位置”复选框表示跟踪中函数调用的开始和结束位置。我们可以使用dx命令显示函数调用对象以查看关联的TimeStart和TimeEnd字段它们与函数调用的“开始位置”和“结束位置”相对应。dx $cursession.TTD.Calls(DisplayGreeting!GetCppConGreeting)[0x0]    EventType        : 0x0    ThreadId         : 0x6600    UniqueThreadId   : 0x2    TimeStart        : 6D:BD [Time Travel]    SystemTimeStart  : Thursday, October 31, 2019 23:36:05    TimeEnd          : 6D:742 [Time Travel]    SystemTimeEnd    : Thursday, October 31, 2019 23:36:05    Function         : DisplayGreeting!GetCppConGreeting    FunctionAddress  : 0x615a0    ReturnAddress    : 0x61746    Parameters必须选中“开始”或“结束”或者同时选中“开始”和“结束”位置框。由于我们的代码既不是递归代码也不是可重入代码因此调用GetCppConGreeting方法时很容易在时间线上定位。对GetCppConGreeting的调用也与我们的断点以及我们定义的内存访问事件同时发生。因此似乎我们已经缩小了代码范围仔细研究了导致应用程序崩溃的根本原因。通过查看多个时间线来探索代码执行尽管我们的代码示例很小但是使用多个时间线的技术可以对时间旅行轨迹进行可视化探索。你可以查看跟踪文件以询问问题例如“何时在命中断点之前访问内存区域”。本文翻译自https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/windbg-timeline-preview
http://www.ihoyoo.com/news/81872.html

相关文章:

  • 网站制作公司收费情况什么是asp网站
  • 徐州网站建设与推广平台维护工作内容
  • 扬州建设网站企业php 网站系统
  • 做健身推广网站用vs2010做网站教程
  • 江门网站制作wordpress无插件美化
  • 昆明公司网站建设免费生成短链接
  • 一个专业做设计的网站红杉树装饰有限公司装修的怎样
  • 商城网站建设资讯百度竞价广告收费标准
  • 合肥做网站做推广学什么技术比较有发展
  • 凡天网网站建设微信网页
  • 备案号 不放在网站首页网站建设英文合同
  • 网站 托管房产建设网站
  • 备案网站名称怎么写江苏建工
  • 做网站一般需要多少钱现在什么网站做推广比较好
  • 公司网站制作网络公司济宁专业网站建设
  • 江西省建设招标网站网上找装修设计师
  • 鄂尔多斯建设招投标网站网站建设电话销售录音
  • 手机wap网站多少钱一学一做征文网站
  • 怎么看网站被降权中国科技成果
  • 校园网站的作用山西大学物理电子工程学院研招网
  • 网站开发需要后台吗自己建的网站打开的特别慢
  • 网站建设营销策略网络营销方案设计范文
  • 广州海外建站网站安全建设模板下载
  • 杭州市富阳区建设局网站重庆活动轨迹公布
  • 山西公司响应式网站建设平台网站关键词库怎么做有什么效果
  • 国外设计师灵感网站用wordpress做视频网站
  • 深圳电商网站设计专业网站优化关键词
  • 老渔哥网站建设公司北京海淀财政局网站
  • 网站优化 检测响应速度wordpress小夜
  • wap 网站的盗链问题做艺术品的网站有哪些