不允许在使用 DRM 内容时在被调试易程序运行完毕程序下运行此过程

在线聊天不可用:
FREEMASTER: FreeMASTER运行时调试工具&&
FreeMASTER是一个用户友好型实时调试检测器和可视化工具,它可以用于任何应用开发和信息管理。FreeMASTER能够对正在运行的系统中的变量进行合作式和非入侵式的监控。您可以在类似示波器的显示屏上显示多个随时间变化的变量,或以文本的形式查看数据。同时,FreeMASTER支持更多能力和目标,可通过目标上的驱动程序从目标传输数据到主计算机。
实时监控器以不同格式观看板载变量或存储器位置
文本(姓名、值、最小值、最大值和枚举...) 实时波形(实时示波器) 高速记录的数据(板载存储器示波器)
用户自定义的仪表板,用于数据显示
从变量观察中直接设置变量值 变量值的时间表驱动 用户命令/消息控制 可视的基于基础脚本的HTML格式(按钮、指示灯、滑块等) 通过嵌入到GUI中的外部应用程序(如Excel)
演示平台您可以描述和演示您的嵌入式应用
通过包含图片、声音、视频序列、链接或任何网页内容的HTML网页 显示同步实时数据检测 浏览嵌入式应用的功能块
轻松的项目部署
整个项目保存到统一的文件中
全部资源/文件打包在项目文件中 带有密码保护的“演示模式”
操作系统:Windows 98、Windows NT、Windows 7 64位(在主机端) 要求的软件:预装Internet Explorer 4.5.5或更高版本 硬盘空间:108 MB
其他硬件要求:用于本地控制的串行RS-232端口
支持的器件
数字信号控制器
数字信号控制器
数字信号控制器
数字信号控制器
数字信号控制器
数字信号控制器
数字信号控制器
数字信号控制器
数字信号控制器
数字信号控制器
数字信号控制器
数字信号控制器
数字信号控制器
数字信号控制器
数字信号控制器
数字信号控制器
MC56F84XXX
数字信号控制器
8-bit ROM option with LCD Driver LT8 MCUs
8位嵌入式EEPROM,用于用户数据存储AB MCU
8位EEPROM仿真AP MCU
8位,带CAN AS和AZ MCU
8位通用EY MCU
8 位通用G MCU
8位通用CAN GZ MCU
8位通用JB、JG、JT和JW MCU
8位通用JK和JL MCU
8位USB K MCU
8位 EEPROM仿真LJ和LK MCU
8位通用MR MCU
电机控制单元
Microcontroller
Microcontroller
Microcontroller
Microcontroller
Microcontroller
8位EEPROM仿真Q MCU
8位通用GB MCU
8位通用GB MCU
8 位低功率 LCD GW 微控制器
8 位 Flexis USB JE 微控制器
8 位 LCD 面向电池供电和手持 LC微控制器
带 LCD 驱动器的 8 位超低功耗 LH 微控制器
8 位超低功耗段式 LCD LL微控制器
8 位 Flexis USB 低功耗 MM128/64/32 微控制器
8位低功耗QA MCU
8位Flexis QE MCU
8位小封装QG MCU
8位S08RC、S08RD、S08RE和S08RG MCU
8位智能分布式控制器
8位MCU,带集成Vreg、HSS、中继驱动器,LIN
8位MCU,带集成Vreg、可配置H-B、LIN
8位MCU,带集成Vreg、步进电机、LIN Phy
8 位通用超低端市场 KA 微控制器
8 位超低功耗 KB 微控制器
8位带 LCD 驱动器的 LA 微控制器
8 位带LCD驱动器的 LE 微控制器
S08 5.5V MCU
8位Flexis AC128/96/60/48/32 MCU
8位通用AW60/48/32/16 MCU
带CAN D的8位高性价比MCU
8位EEPROM、带LIN的S08EL和S08SL MCU
8位高性价比FL16/8 MCU
8位USB经济型JM MCU
8位USB JS MCU
8位段式 LCD S08LG32和 S08LG16 MCU
8位通用MP MCU
8位小封装QD MCU
带TSI的8位EEPROM,用于车身电子MCU
8位C4小封装SC4 MCU
8位通用SE MCU
8位电机控制SF MCU
8位小型封装SG MCU
8位通用SH MCU
8位EEPROM、带LIN的S08EL和S08SL MCU
8位性能一流的通用SV微控制器
16位微控制器
16位微控制器
16位微控制器
16位微控制器
16位汽车微控制器
16位汽车微控制器
16位汽车微控制器
16位汽车微控制器
S12 MagniV:汽车和工业混合信号微控制器(MCU)
面向BLDC和DC电机控制的S12 MagniV混合信号MCU
Kinetis K10 - 100 MHz,高精度模拟集成,高级串行通信微控制器(MCU)
Kinetis K10 - 120 MHz,高模拟集成,高级串行通信微控制器(MCU)
Kinetis K10 - 50 MHz,基准,低功耗微控制器(MCU)
Kinetis K10 - 72 MHz,可扩展性,串行通信微控制器(MCU)
Kinetis K11 - 50 MHz,基准,篡改检测,安全加密微控制器(MCU)
Kinetis K12 - 50 MHz,基准,低功耗微控制器(MCU)
Kinetis K20 - 100 MHz,USB,高精度模拟集成,串行通信微控制器(MCU)
Kinetis K20 - 120 MHz,HS USB,高模拟集成,串行连接微控制器(MCU)
Kinetis K20 - 50 MHz,USB,低功耗微控制器(MCU)
Kinetis K20 - 72 MHz,USB,可扩展性,串行通信微控制器(MCUs)
Kinetis K21 - 120 MHz,USB,篡改检测,安全加密微控制器(MCU)
Kinetis K21 - 50 MHz,USB,篡改检测,安全加密微控制器(MCU)
Kinetis K22 - 100 MHz,低功耗,USB微控制器(MCU)
Kinetis K22 - 120 MHz,低功耗,高性能,USB微控制器(MCU)
Kinetis K22 - 50 MHz,USB,低功耗微控制器(MCU)
Kinetis K24 - 120 MHz,低功耗,高性能,USB,带256KB SRAM的微控制器(MCU)
Kinetis K30 - 100 MHz,段式LCD,模拟集成,串行通信微控制器(MCU)
Kinetis K30 - 72 MHz,段式LCD,串行通信微控制器(MCU)
Kinetis K40 - 100 MHz,段式LCD,USB,模拟集成,串行通信微控制器(MCU)
Kinetis K40 - 72 MHz,段式LCD,USB,串行通信微控制器(MCU)
Kinetis K50 - 100 MHz,测量引擎,USB微控制器(MCU)
Kinetis K50 - 72 MHz,测量引擎,USB微控制器(MCU)
Kinetis K51 - 100 MHz,测量引擎,段式LCD,USB微控制器(MCU)
Kinetis K51 - 72 MHz,测量引擎,段式LCD,USB微控制器(MCU)
Kinetis K53 - 100 MHz,测量引擎,段式LCD,以太网,USB微控制器(MCU)
Kinetis K60 - 100 MHz,以太网,USB,模拟集成微控制器(MCU)
Kinetis K60 - 120/150 MHz,以太网,HS USB,安全加密,篡改检测微控制器(MCU)
Kinetis K63 - 120 MHz,以太网,USB,安全,篡改检测,带256KB SRAM的微控制器(MCU)
Kinetis K64 - 120 MHz,以太网,USB,256KB SRAM微控制器(MCU)
Kinetis K7x图形LCD微控制器(MCU)
Kinetis K70图形LCD 120/150 MHz MCU
ARM(R) Cortex(R)-M0+汽车MCU: Kinetis EA系列
Kinetis KEA - 面向工业控制和运输行业的超可靠5V MCU
Kinetis KL0 - 48 MHz,入门级,小规格,高集成度,超低功耗微控制器(MCU)
Kinetis KL02 - 48 MHz,小规格,高集成度,超低功耗微控制器(MCU)
Kinetis KL03 - 48 MHz,小规格,高集成度,超低功耗微控制器(MCU)
Kinetis KL1x - 48 MHz,通用,数据连接,高集成度,超低功耗微控制器(MCU)
Kinetis KL2x - 48 MHz,USB,数据连接,高集成度,超低功耗微控制器(MCU)
Kinetis KL3x段式LCD MCU
Kinetis KL4x - 48 MHz,USB,段式LCD,数据连接,高集成度,超低功耗微控制器(MCU)
Kinetis KV1x - 75 MHz,BLDC,PMSM电机,入门级微控制器(MCU)
Kinetis KV3x - 100/120 MHz,BLDC,DSP,FPU,高性能微控制器 (MCU)
Kinetis KV4x - 150 MHz,高精度,传感,电机和功率控制,高性能微控制器(MCU)
ColdFire+ Jx系列
ColdFire+ Qx系列
32位微控制器,带CAN
32位微控制器
32位微控制器,带USB On-The-Go
32位微控制器,带USB
集成式ColdFire V2以太网微控制器
一站式连接32位微控制器
集成式ColdFire V2以太网、CAN和闪存微控制器
ColdFire(R) V2嵌入式处理器
集成式V2 ColdFire微处理器
MPC55xx MCU
面向动力总成应用的Qorivva 32位MCU
面向动力总成应用的Qorivva 32位MCU
MPC56xx MCU
面向车身电子应用的Qorivva 32位MCU
面向ADAS应用的Qorivva 32位MCU
面向汽车底盘和安全应用的Qorivva 32位MCU
面向动力总成应用的Qorivva 32位MCU
面向动力总成和变速箱应用的Qorivva 32位MCU
面向车身控制模块和网关应用的Qorivva 32位MCU
面向网关应用的Qorivva双核32位MCU
面向动力总成应用的Qorivva 32位MCU
面向动力总成应用的Qorivva 32位MCU
面向ADAS应用的Qorivva 32位MCU
MCU官方微信
汽车电子官方微信调试与运行72-第3页
上亿文档资料,等你来发现
调试与运行72-3
在DEBUG状态下,有多种方法运行已装入内存的可;当可执行程序在装入内存后,CS是它的代码段的段寄;(1)G(GO)命令;格式:G[=addr[,addr1[,addr2;功能:连续执行内存中的程序;G命令中的第一个参数?=addr?是运行程序的起;当用G=addr命令形式时,则运行的起始地址由C;为了灵活方便地对程序进行调试和跟踪执行,往往在程;(2)T(
在DEBUG状态下,有多种方法运行已装入内存的可执行文件。大体上可分为两类:一类是连续运行方式,即一次可连续地执行多条指令语句;另一类是单步运行方式,即一次只执行一条指令语句。G命令是连续运行方式命令,P和T命令是单步运行方式命令。当可执行程序在装入内存后,CS是它的代码段的段寄存器。因而,在运行程序的命令中所涉及的地址参数都只是偏移量。(1) G(GO)命令格式:G [ =addr [ ,addr1 [ ,addr2 [ ,…] ] ] ]功能:连续执行内存中的程序G命令中的第一个参数?=addr ?是运行程序的起始地址,参数addr1,addr2……称为断点地址。起始地址前的?=?是不可缺少的,它是区别起始地址与后边不带等号的断点地址的标志。一条G命令中可最多允许设置10个断点地址。当用G=addr命令形式时,则运行的起始地址由CS:addr指定,而用不带起始地址参数的命令形式时其起始地址是CS:IP。为了灵活方便地对程序进行调试和跟踪执行,往往在程序结束地址前,根据需要任意指定一些指令的首地址作为断点地址。当程序运行到该地址时便自动中止运行,并同时显示出CPU中寄存器的内容和将要执行的下一条指令。如果在G命令中没有设置断点,或设有断点但程序在执行中未到达断点处,这时程序将一直运行,直至结束。在结束时显示提示信息? Programe
terminated
nomally ?。断点地址只对本次的G命令有效,即每一次G命令中的断点都需要重新设置。(2) T(Trace)命令格式: T [=addr] [Value]功能: 执行一条指令,并显示CPU中寄存器的内容和要执行的下一条指令。 T命令中的参数?=addr?是程序运行的起始地址。若在命令中未指定,则CS:IP就成为起始地址。参数? Value ?是本次T命令要执行指令的条数(十六进制数),若在命令中未指定,则视其值为?1?。例如: -T=0,2或-T=0
2 AX=10A8 BX=0000 CX=0200 DX=0000 SP=0040 SI=0000 DI=0000 DS=1090 ES=1090 SS=10AC CS=10B0 IP=0003 NV UP DI PL NZ NA PO NC10B0:0003 BED8
DS,AX AX=10A8 BX=0000 CX=0200 SP=0040 BP=0000 SI=0000 DI=0000 DS=10A8 ES=1090 SS=10AC CS=10B0 IP=0005 NV UP DI PL NZ NA PO NC10B0:0005 BBFFFF
BX,FFFF利用T命令的这个特点,可以跟踪程序中每一条指令的执行情况。但是有时它也会带来不方便。比如,在执行子程序调用指令(CALL)时,会进入子程序;在执行LOOP指令是有会返回到LOOP指令的标号处,进入循环。P命令就不会这样。(3) P(Proceed)命令格式:P [=addr] [Value]P命令的功能同于T命令。只是P命令对于每一条指令语句都是一次执行完成。比如CALL、LOOP和DOS功能调用的INT
n 等指令语句。在执行一条语句后,再显示CUP中寄存器的内容和下一条指令。从这里可以看出,T命令能在程序执行过程中,跟随IP指示的地址,跟踪指令的执行,而P命令则是按指令语句,续进(Proceed)执行的。在调试中,用户可根据需要,选择不同的运行程序命令,以适应调试的要求。程序调试初步程序的调试,就是在调试环境中运行被调试的用户程序,同时运用适当的调试技术和手段,找出错误并进行修改,直至满足设计要求为止。因为程序的调试过程是一个上机运行,检查错误的过程,故又称为动态查错。在调试中,应该首先对程序是否能实现预期的主要功能进行验证,然后并结合程序的设计逻辑,对程序的执行路径和出错处理能力等方面进行验证,因此,在调试前,原则上应该有一个调试计划或步骤,并准备好相关的测试数据。当然,对于调试那些简单程序来说,就没有这个必要了。但是,还是一定要做到心中有数;否则在调试中会感到不知所措,无从下手。通过使用测试数据,对程序的功能、执行路径和出错处理能力等方面的检查、测试,从而迅速暴露错误,这就为查找出错点和对程序的修改提供了依据。当然,在调试中到底应该采用何种技术措施,也不时一成不变,应根据具体的程序而定。比如,一方面可在程序中增加适当的调试语句,用以记录程序的执行路径、统计路径或循环次数、显示或打印等,为调试提供相关信息。另一方面则应充分利用调试系统程序提供的命令,比如设置断点、跟踪运行、中间结果的显示或打印、数据的更新等,构成一个方便的调试环境。还可以根据程序的结构,按实现的功能,将程序划分成若干个块或段,进行分段调试,缩小出错的范围。总之,程序调试技术的具体使用依赖于程序员的分析判断能力和经验,也只有通过实践才能提高。对于用DEBUG调试汇编语言程序来说,首先应将源程序.ASM进行汇编、连接,得到一个可执行文件.EXE,这时就可借助于调试程序DEBUG提供的命令,对这个程序进行调试。在调试中怎样选用DEBUG中的命令,有效地调试与运行程序,这对于初学者来讲,需要一个学习、实践和提高的过程。下面将介绍使用DEBUG调试环境,调试汇编语言程序的一些基本要领。1. 调试前的准备工作在正式进入调试之前,应作好必要的准备工作。比如,将程序初步划分成若干的功能段,这是进行分段调试的基础。利用 .LST或 .REF文件中的信息,记下调试中某些关键变量、标号、子程序的地址,为调试中查看中间结果和设置断点位置。尽管随着调试的进行,可能会在调试中的动态地调整,但是它们会给调试工作带来极大的方便。2. 调用DEBUG,装入被调用程序无论用那种方式进入DEBUG,一定要以全名的形式指定用户可执行程序文件名(文件名.扩展名),装入被调试程序。3. 观察寄存器和数据单元的初始值在装入用户程序后,可用R命令显示寄存器的初始值。从CS,SS可以了解到程序的代码段和堆栈段在内存中的分布和段基值。从IP可以知道第一条可执行指令在代码中的起始地址(这条指令显示在第三行)。SP则是指向堆栈栈底的下一个单元。DS和ES中存放的值则是PSP的段基值,它们并不是用户程序数据段的段基值。如果这时要查看用户程序数据段中的初始数据,必须通过对目标代码的反汇编,从相关的指令中找出数据段的段基值。由 .LST文件中找出变量的偏移量,然后再用D命令进行显示。但是,在数据段寄存器初始化后,只需在D命令中给出变量的偏移量,就可以查看数据段中的数据了。4. 目标代码的反汇编在运行程序之前,最好先对要执行的代码段进行反汇编,只有这样才能确定待运行的程序段的首地址,应该从哪些寄存器或变量单元中查看中间结果等。5. 选用适当的运行程序命令,运行用户程序DEBUG提供了G、T、P三个运行程序命令,灵活地使用它们,会大大地提高程序调试工作效率。在什么情况下,选用哪条命令,是经验和实践的总结。例如,在顺序执行部分,通常使用G命令。到底要执行多少条指令,有取决于用户希望在什么位置去看中间结果。又如,在确认某程序段没有错误的情况下,也可使用它连续执行完这段程序,以便迅速进入下一个功能段程序的调试点。对于要特别仔细查看的指令,可选用P命令或T命令。建议在单步执行时,选用P命令。只有在需要考查LOOP循环,进入子程序或软中断调用中时,使用T命令进行跟踪运行。在使用P、T命令后,可以观察显示寄存器中的内容,或查看相关变量的值,从而判断程序是否实现了预期的功能。总之,上面仅仅是针对程序运行命令各自的特点,提出了一些使用建议。用户还应根据调试中的实际情况,灵活应用。6. 断点的设置在程序的各功能段调试中,可能本段包含有转移分支指令,往往需要对分支的原因,分支的正确性进行验证。这时就需要在G命令中加上断点参数。当然,也可以用P命令或T命令来跟踪分支的发生,但有时又显得较为繁琐。下面的程序段是一个用来说明使用断点进行程序调试的简单示例。
AL,01该程序段能实现从[BX]所指示的数据缓冲区中,查找是否有数据若有则将AL置0,否则将AL置1。从程序的结构可知,它有共同的入口地址0104H,有两个出口地址0116H和0118H。0116H是未找到数据库的出口地址,0116H是未找到数8的出口地址。因此,可以将它们设为断点,用命令:-G=104 116 118运行这段程序后,便可根据显示出的下一条指令,判断出是否找到8,同样也可以使用命令:-G=104 118 116在程序的调试运行中,如果一时难于确定程序的运行流程,也可将不同的测试点作为断点。通过输入已知的数据,判断程序的运行流程正确与否。7. 观察运行结果用D命令及R命令就可方便地显示出存放在内存单元和寄存器中的中间结果或最后结果。结合程序运行的环境和初始数据,对运行结果进行分析,很容易判断出程序的功能是否正确。对于通过堆栈传递的数据,也可用D命令查看。8.修改调试数据或程序在程序的调试过程中,往往应根据调试项目的需要,准备充足的调试数据。在测试一个项目时,可能需要更换相关的数据。比如,为了测试程序出错处理能力,除了要给定不同的非法数据外,还要给出一些满足边界条件的不同种类的数据。对于这些数据,可以用E或R命令将其放置到相关的寄存器或内存单元中。在修改字节寄存器内容时,应保证该寄存器的另一个字节值不被破坏。对程序的修改是一件特别细心的事,用A命令可以修改程序中的错误指令。但是,应保证新指令的目标代码字节数应小于等于原指令的目标代码的字节数。如果需要加入多条调试指令时,只有采用打补丁的办法,将它们添加在程序的尾部。使用跳转指令,实现添加程序的正确衔接。 COM文件格式的汇编程序.COM文件是一种不具有 .EXE文件中的可重复定位信息头(Header),包含各类专业文献、各类资格考试、专业论文、外语学习资料、文学作品欣赏、幼儿教育、小学教育、应用写作文书、高等教育、调试与运行72等内容。 
  系统的调试与运行_电子/电路_工程科技_专业资料。系统的调试与运行 2.1 通电前的检查 电气安装完毕后,必须对电气部分进行检查。 检查时应注意以下几点。 (1)...  第7章 程序运行与调试 程序运行与调试 运行与 在完成程序的前面板和代码的设计后,需要对程序进行调试。调试的过程就是检查程序的 运行方式和结果是否与设计要求相...  7163842.doc 第十章知识目标: 知识目标:●●● 污水处理厂(站)的调试与运行管理 了解污水处理厂(站)的调试程序 掌握污水处理厂运行管理的基本方法 了解污水处理...  水池或达标排放,设备可自动或手动控制,如发现 MBR 反应器运 行不正常时, 应及时处理或上报有关维修部门, 调试操作人员必须熟悉本处理工艺和设施的 运行要求与技术...   怎样调试与运行流量计_机械/仪表_工程科技_专业资料。怎样调试与运行流量计。怎样调试与运行流量计 任何流量计安装完成后我们要看一下这个流量计是否能够正常运行,...  调试及运行操作 1、调试前准备 、 加热炉安装结束后,必须经有关部门及专业技术人员全面检查,验收合格后方可投入使用, 且须特别注意如以下几点: ①检查加热炉运行...  试论污水处理厂设备的调试与试运行策略_设计/艺术_人文社科_专业资料 暂无评价|0人阅读|0次下载 试论污水处理厂设备的调试与试运行策略_设计/艺术_人文社科_专业...   汇编语言调试及运行_工学_高等教育_教育专区。熟悉DEBUG程序和命令,并用它运行基本指令和察看运行结果。汇编语言程序设计实验实验一 汇编语言的调试和运行 班级: ...  调试由单回路调试、联动调试和试运行三个阶段组成。各项调试工作如下: 5. 调试前的检查:调试前应对与系统有关的环境、导线绝缘电阻、供电系统(包括 UPS)加以检查...一、功能:
调试不在编译器中运行的程序。可以解决一下两种问题。
1、 程序崩溃,能找到程序报错是运行的代码行。
2、 程序涨内存,直接定位到导致内存泄漏的语句。(这个在Debug Diagnostic Tool中使用很简单)
二、用法:
我知道两个工具,Windbg和Debug Diagnostic Tool,前者比较牛叉,能调试系统驱动级的程序,普通程序当然也能调试,后者方便易用,功能也很厉害。
1、如果要调试运行在没有开发环境的机器上的程序,可以此机器上开一个远程调试工具(Windbg或者Remote Debug),然后在自己工作机上运行调试工具(windbg或者vs2008),设置好Symbol(符号 *.pdb文件)和Source(源码)文件路径,然后Attach to Process到需要调试的进程,就能像在平时用vs2008 上调试一样方便了。
2、如果要调试崩溃的程序,可以抓一个dump(*.dmp文件,也叫内存转储文件),然后用Windbg或者DebugDiagnosticTool工具进行分析,也能找到出错的代码行,进而分析出结果。
总之,调试前一定要设置Symbol文件路径,没有Symbol,你看到的调用堆栈基本上毫无意义。
三、详细用法:
(32位机器安装x86版本 64位机器安装x64版本, 以下链接为32位版本)
下载安装windbg
下载安装Debug Diagnostic Tool
Windbg中:
1、 设置Symbol和Source。
File-&Symbol File Path File-&Source File Path
Symbol中添加“srv*c:\symbols*”,可以自动从Microsoft中下载windows系统的pdb,自动按需下载。如果添加多个目录,可以用 ; 分隔。
2、 直接调试可执行程序(*.exe)。
File-&Executable ,然后找到exe程序,打开即可。
Debug-&Stop Debug可以停止调试。
3、 调试正在运行中的可执行程序。
先运行程序,然后打开Windbg,File-&Attach to a process。
4、 调试运行时崩溃的程序。
只要崩溃的程序没有关闭,
打开Windbg,File-&Attach to a process,选中崩溃的程序。
在command中输入[.dump /ma 要保存的文件完整路径名称],提示Dump successfully written后,就会生成一个dump文件。
打开Windbg.设置好Symbol文件路径,File-&Symbol File Path。
打开dump文件,File-&Open Crash dump。
开始分析。。。
kb 显示当前线程调用堆栈。
~*kb 显示所有线程调用堆栈。
lm 显示当前加载的模块信息 (*.pdb *.dll)
!analyze –v 详细列出dump文件的信息
&多数境况下列出堆栈信息,基本就能确定是程序哪行出现问题了。
5、调试涨内存的程序
这个时候用Debug Diagnostic Tool
设置symbol文件路径
6、 远程调试(没有实践过)
1)使用windbg:
你可以从机器A上调试在机器B上执行的程序。具体步骤如下:
在机器B上启动一个调试窗口(Debug Session)。你可以直接在Windbg下运行一个程序或者将Windbg附加(Attach)到一个进程。
在机器B的Windbg命令窗口上启动一个远程调试接口(remote):
.server npipe:pipe=PIPE_NAME
PIPE_NAME是该接口的名字。
在机器A上运行:
windbg –remote npipe:server=SERVER_NAME,pipe=PIPE_NAME
SERVER_NAME是机器B的名字。
2)使用vs2008:
在机器B上启动msvsmon.exe(远程调试器,在Viual studio Tool中可以找到,要拷贝所有文件到机器B(C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger\x86))
点击 工具-&选项 ,选择“windows身份验证”
点击 工具-&权限 ,勾选“允许”
然后在机器A上打开vs2008,点击 工具-&附加到进行,弹出下面窗口,输入机器B的IP,连接正常后,就能在下面看见机器B上的进程了。
四、windbg常用命令:
.dump /ma File Name 创建一个Dump文件
显示调用堆栈:在连接到一个调试窗口后,首先要知道的就是程序当前的执行情况
kb 命令显示当前线程的堆栈。
~*kb会显示所有线程的调用堆栈。如果堆栈太长,Windbg只会显示堆栈的一部分。.kframes可以用来设置缺省显示框架数。
显示局部变量:
dv显示局部变量的信息。
CTRL+ALT+V可以切换到更详细的显示模式。
关于dv要注意的是在优化过的代码中dv的输出极有可能是不准确的。这时后你能做的就是阅读汇编代码来发现你感兴趣的值是否存储在寄存器中或堆栈上。有时后当前的框架(Frame)上可能找不到你想知道的数据。如果该数据是作为参数传到当前的方法中的,可以读一读上一个或几个框架的汇编代码,有可能该数据还在堆栈的某个地址上。静态变量是储存在固定地址中的,所以找出静态变量的值较为容易。.Frame(或者在调用堆栈窗口中双击)可以用来切换当前的框架。注意dv命令显示的是当前框架的内容。你也可在watch窗口中观察局部变量的值。
显示类和链表:
dt可以显示数据结构。比如dt PEB 会显示操作系统进程结构。在后面跟上一个进程结构的地址会显示该结构的详细信息:dt PEB 7ffdf000。
Dl命令可以显示一些特定的链表结构。
显示当前线程的错误值:
!gle会显示当前线程的上一个错误值和状态值。
!error命令可以解码HRESULT。
搜索或修改内存:
s 命令来搜索字节,字或双字,QWORD或字符串。
e命令来修改内存。
计算表达式:
?命令可以用来进行计算。
关于表达式的格式请参照帮助文档。使用n命令来切换输入数字的进制。
显示当前线程,进程和模块信息:
!teb显示当前线程的环境信息。最常见的用途是查看当前线程堆栈的起始地址,然后在堆栈中搜索值。
!peb显示当前进程的环境信息,比如执行文件的路径等等。lm显示进程中加载的模块信息。
显示寄存器的值:
r命令可以显示和修改寄存器的值。如果要在表达式中使用寄存器的值,在寄存器名前加@符号(比如@eax)。
显示最相近的符号:
ln Address。如果你有一个C++对象的指针,可以用来ln来查看该对象类型。
查找符号:
x命令可以用来查找全局变量的地址或过程的地址。x命令支持匹配符号。
x kernel32!*显示Kernel32.dll中的所有可见变量,数据结构和过程。
查看lock:
!locks显示各线程的锁资源使用情况。对调试死锁很有用。
查看handle:
!handle显示句柄信息。如果一段代码导致句柄泄漏,你只需要在代码执行前后使用!handle命令并比较两次输出的区别。
!htrace对调试与句柄有关的Bug非常有用。在开始调试前输入:
!htrace –enable
然后在调试过程中使用!htrace handle_value 来显示所有与该句柄有关的调用堆栈。
显示汇编代码:
程序执行控制命令:
设置代码断点:bp/bu/bm 可以用来设置代码断点。你可以指定断点被跳过的次数。假设一段代码KERNEL32!SetLastError在运行很多次后会出错,你可以设置如下断点:
&&&&bp KERNEL32!SetLastError 0x100.
在出错后使用bl 来显示断点信息(注意粗体显示的值):
0 e 77e7a3b0 004f (0100) 0:*** KERNEL32!SetLastError
重新启动调试(.restart命令)并设置如下的断点:
bp Kernel32!SetLastError 0x100-0x4f
Debugger会停在出错前最后一次调用该过程的地方。
你可以指定断点被激活时Debugger应当执行的命令串。在该命令串中使用J命令可以用来设置条件断点:
bp `mysource.cpp:143` &j (poi(MyVar)”0n20) ''; 'g' &
上面的断点只在MyVar的值大于32时被激活(g命令
条件断点的用途极为广泛。你可以指定一个断点只在特殊的情况下被激活,比如传入的参数满足一定的条件,调用者是某个特殊的过程,某个全局变量被设为特殊的值等等。
设置内存断点:ba可以用来设置内存断点。调试过程中一个常见的问题是跟踪某些数据的变化。如下的断点:
ba w4 0x & g&
可以打印出所有修改0x的调用堆栈。
控制程序执行:p, pa,t, ta等命令可以用来控制程序的执行。
控制异常和事件处理:Debugger的缺省设置是跳过首次异常(first chance expcetion),在二次异常(second chance exception)时中断程序的执行。sx命令显示Debugger的设置。sxe和sxd可以改变Debugger的设置。
&&&&sxe clr
可以控制Debugger在托管异常发生时中断程序的执行。常用的Debugger事件有:
av 访问异常
eh C++异常
clr 托管异常
ld 模块加载
-c 选项可以用来指定在事件发生时执行的调试命令。
五、Debug Diagnostic Tool详细用法
参考此文:
此工具可以在程序发生崩溃或者内在溢出时自动生成dump,并有相应的崩溃/挂起分析器和内存压力分析器。
六、其他调试工具
参考此文:
对于C++的程序来说,那工具可就多了。这里我主要用的是IIS Debug Diagnostics Tool,这个原本是用于IIS应用程序的诊断工具,在监视系统服务这样的应用上还是很方便的。同时它可以进行自动的memory leak分析并生成报表。对于memory leak的诊断很有帮助。当然,我还用到了vmmap和rammap两个应用程序。这两个程序原先是system internal那个作者开发的,现在已经收归微软门下了。这两个文件一个用于查看进程的虚拟内存分配情况,而另一个拥有查看物理内存的时候情况。最后一个工具就是process
hacker,它能帮助我们更详细的了解进程的内存分配,句柄分配,模块加载,线程数目等。当然processexplorer也可以做相同的工作,但是如果你要查看内存块的内容时,还需要windbg的配合。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:103401次
积分:1936
积分:1936
排名:第8577名
原创:82篇
转载:65篇
评论:17条
(1)(7)(10)(5)(14)(5)(10)(1)(1)(22)(2)(9)(1)(3)(1)(4)(8)(45)}

我要回帖

更多关于 mysql 存储过程 调试 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信