当前位置:文档之家› Unity_VS断点调试

Unity_VS断点调试

Unity_VS断点调试
Unity_VS断点调试

如何使用unity Vs来进行断点调试

1. 安装unity vs。首先我们打开我们下载的unity vs。然后就会看见里面有3个文件,我们双击UnityVS 2013-1.8.1.msi。进行安装,在其过程狂点击下一步就可以,直到点击finish。安装完成。

2. 我们先找到你安装visual studio 2012或者visual studio 2013的目录。

(****\Microsoft Visual Studio12.0\Common7\IDE\Extensions\SyntaxTree\UnityVS) 。

例如我是安装在

D:\ProgramFiles(x86)\MicrosoftVisualStudio12.0\Common7\IDE\Extensions\SyntaxTree\UnityVS 3. 从我们刚下载的unity vs里面,找到SyntaxTree.VisualStudio.Packages.dll。(上面所说的3个文件的其中一个)。

然后把这个文件粘贴在步骤2中的.....\UnityVS文件夹中。

4. 然后我们打开unity,新建一个工程。然后我们右键导入一个unity vs2013这个包(如果你以上操作都正确的话就能在右键后看见unity vs 2013这个包)

6 .然后我们修改下打开脚本的方式(其实这一般安装正确后会自动选择unityvs 2013去打开的这里我说下手动改变方式)。

打开Edit----Preferences,选中External Tools ,选择其unityvs OpenFile 。如图:

5. 然后新建一个脚本,我这取名为DebugTest.cs。来说明如何使用unity vs来断点调试。

6. 当我们双击的打开脚本的时候会弹出一个提示框,如下:

7. 我们打开刚才下载的,还记得我上面强调有3个文件吧,好了,我们打开key.txt。然后全选复制其内容,把它粘贴上去,点击ok,稍等片刻,就可以了。如图:

8. 我们现在可以写脚本了,我在DebugTest.cs写的内容很简单,就是测试从1+...10。内容如下:

using UnityEngine; using System.Collections; public class DebugTest : MonoBehaviour

{ private int sum = 0; void OnGUI()

{ if (GUILayout.Button("Add"))

{ for (int i = 1; i < 10; i++)

{

sum += i;

}

Debug.Log("1+2+3+...+10=" + sum);

} if (GUILayout.Button("Clear"))

{

sum = 0;

}

}

}

9.我们把脚本拖个Main Camera . 好了,我们来随便加个断点吧,如图:

10. 我们可以开始断点测试了(有可能或弹出要你输入license ,那就要再次把我们的key给粘贴进去)。点击vs的启动,如图:

11.可以看见我启动成功了。然后我们回到unty 中,开始运行程序,当我们点击Add按钮后,程序运行到了我们断点处就停在那了。好了,时间不早了,我该休息了,明天还要7点起来上班了。能力有限,出错难免,还望大家多多指点!

您可能也喜欢:

Unity3d +vs2012 多线程.多并发网络解决方案(C#) Unity3d +vs2012 多线程.多并发网络解决方案(C#)

Unity3D 读写txt 文件

Unity3D 读写txt 文件

Unity强制屏幕纵宽比脚本

Unity强制屏幕纵宽比脚本

“神奇女侠”或登银幕加入《蝙蝠侠VS超人》“神奇女侠”或登银幕加入《蝙蝠侠VS超人》

Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二)Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二)

评论这张

转发至微博

转发至微博

阅读(2189)| 评论(0)

|

用微信“扫一扫”

将文章分享到朋友圈。

用易信“扫一扫”

将文章分享到朋友圈。

窗体顶端

窗体底端

喜欢推荐0人 | 转载

XLS文件怎么打开?4种操作系统下打开XLS文件的方法

Create a Skybox From Photos 用一张图片制作skybox

历史上的今天

最近读者

登录后,您可以在此留下足迹。

狼血统的

tianbang

jan54495

dreamson

李良生

Ash9999

徐墨轩

sese4204

热度

旋转动力

在LOFTER的更多文章

关闭

玩LOFTER,免费冲印20张照片,人人有奖!我要抢> 评论

点击登录|

取消

上一页1... -1-1-1-1-1-1-1... -1下一页

页脚

公司简介- 联系方法- 招聘信息- 客户服务- 隐私政策- 博客风格- 手机博客- VIP博客- 订阅此博客

网易公司版权所有 ?1997-2015

×

登录网易通行证

窗体顶端

欢迎通过百度搜索来到踏浪星空的博客!

注册登录后,你也可以拥有自己的个人博客,还可以和博友更好的交流。

网易博客欢迎你的加入

请输入登录信息

用户名:

窗体底端

Visual Studio调试之断点进阶篇

在上一篇文章Visual Studio调试之断点基础篇里面介绍了什么是断点,INT 是Intel 系列CPU的一个指令,可以让程序产生一个中断或者异常。程序中如果有中断或者异常发生了以后,CPU会中断程序的执行,去一个叫做IDT的部件查找处理这个中断(或者异常)的例程(Handler)。IDT是操作系统在启动的时候初始化的,至于IDT的细节问题,例如什么是IDT,怎样编写一个IDT的例程,怎样初始化IDT,可以去网上搜索一些资料。 总之,这里我们只要知道,CPU在执行程序指令过程中,碰到INT 3中断程序的执行,CPU 然后去IDT表里面找到处理断点的例程入口。这个例程要做的事情就是: 1.先看看机器里面是不是安装了一个调试器—记住,这一步很重要,之所以重要以 后的文章里面会介绍。 2.如果机器里面没有安装调试器,那么操作系统就会终止程序的执行。 3.否则操作系统启动调试器,并将调试器附到进程上。 4.这样,我们才能在调试器里面检查程序内部变量的值。 前面文章里面的INT 3 (或者DebugBreak(),或者Debugger.Break())指令是我们自己在代码里面硬编码进去的,因此我们在Visual Studio里,在相应的代码行里面点一下,出现一个小红球,也就是说Visual Studio在程序指令集某个地方动态地添加了一个INT 3指令。现在的问题来了,Visual Studio是如何在程序中正确找到插入INT 3指令的位置的? 或者更具体一些,我们在源代码(文本文件)里面设置断点的,Visual Studio需要把代码行翻译成在程序指令集中的位置。Visual Studio之所以需要做翻译,是因为通常一行C++或者C#代码都会对应好几行汇编指令。 因此,Visual Studio需要一个额外的文件来执行这个翻译过程,这个额外的文件叫做调试符号文件(Symbols),是由编译器生成的。Visual Studio系列的编译器,不论是C#、https://www.doczj.com/doc/d61701298.html,还是C++编译器都会生成这个调试符号文件,.pdb 文件。所以如果你花一点时间看看Debug文件夹的话,你就会发现这个文件。 因此我们来看看Visual Studio支持的各种断点,并解释各种断点的实现方式 条件断点 首先我们先看看如何设置条件断点,条件断点有两种,一种是根据触发的次数来设置,另外一种是根据一条预置的条件来设置。 根据触发次数设置 比如说,你有一个循环,循环1000次,你知道有一个BUG总是在500次之后才会出现,因此肯定希望在循环内设置一个断点,但是前面500次都不会触发这个断点,否则连续按500次的F5的确不是一件轻松的差事。

AS断点调试

1.设置断点 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可。 2.开启调试会话 点击红色箭头指向的小虫子,开始进入调试。 IDE下方出现Debug视图,红色的箭头指向的是现在调试程序停留的代码行,方法f2()中,程序的第11行。红色箭头悬停的区域是程

序的方法调用栈区。在这个区域中显示了程序执行到断点处所调用过的所用方法,越下面的方法被调用的越早。 3.单步调试 3.1 step over 点击红色箭头指向的按钮,程序向下执行一行(如果当前行有方法调用,这个方法将被执行完毕返回,然后到下一行) 3.2 step into 点击红色箭头指向的按钮,程序向下执行一行。如果该行有自定义方法,则运行进入自定义方法(不会进入官方类库的方法)。具体步骤如下:在自定义方法发f1()处设置断点,执行调试

点击

3.3 Force step into 该按钮在调试的时候能进入任何方法。 3.4 step out 如果在调试的时候你进入了一个方法(如f2()),并觉得该方法没有问题,你就可以使用stepout跳出该方法,返回到该方法被调用处的下一行语句。值得注意的是,该方法已执行完毕。 3.5 Drop frame

点击该按钮后,你将返回到当前方法的调用处(如上图,程序会回到main()中)重新执行,并且所有上下文变量的值也回到那个时候。只要调用链中还有上级方法,可以跳到其中的任何一个方法。 4. 高级调试 4.1 跨断点调试 设置多个断点,开启调试。

想移动到下一个断点,点击如下图: 程序将运行一个断点到下一个断点之间需要执行的代码。如果后面代码没有断点,再次点击该按钮将会执行完程序。 4.2 查看断点

如何高效使用GDB断点

在gdb中,断点通常有三种形式 断点(BreakPoint): 在代码的指定位置中断,这个是我们用得最多的一种。设置断点的命令是break,它通常有如下方式: 可以通过info breakpoints [n]命令查看当前断点信息。此外,还有如下几个配套的常用命令: 观察点(WatchPoint): 在变量读、写或变化时中断,这类方式常用来定位bug。

捕捉点(CatchPoint): 捕捉点用来补捉程序运行时的一些事件。如:载入共享库(动态链接库)、C++的异常等。通常也是用来定位bug。 捕捉点的命令格式是:catch ,event可以是下面的内容 自动删除。 捕捉点信息的查看方式和代码断点的命令是一样的,这里就不多介绍了。 在特定线程中中断 你可以定义你的断点是否在所有的线程上,或是在某个特定的线程。GDB很容易帮你完成这一工作。

break thread break thread if ... linespec指定了断点设置在的源程序的行号。threadno指定了线程的ID,注意,这个ID是GDB分配的,你可以通过"info threads"命令来查看正在运行程序中的线程信息。如果你不指定thread 则表示你的断点设在所有线程上面。你还可以为某线程指定断点条件。如: (gdb) break frik.c:13 thread 28 if bartab > lim 当你的程序被GDB停住时,所有的运行线程都会被停住。这方便你你查看运行程序的总体情况。而在你恢复程序运行时,所有的线程也会被恢复运行。那怕是主进程在被单步调试时。 在特定条件下中断 条件断点的一种特殊场景是在断点命中指定次数后停下来。事实上每个断点都有一个 ignore count, 他是一个正整数。通常情况下它的值为0,所以看不出来它的存在。但是如果它是一个非0值, 那么它将在每次命中后都将 count 减 1,直到它为 0. ignore bnum count 恢复程序运行和单步调试 在gdb中,和调试步进相关的命令主要有如下几条: 参考资料

eclipse断点调试指导

1.进入debug模式(基础知识列表) 1、设置断点 2、启动servers端的debug模式 3、运行程序,在后台遇到断点时,进入debug调试状态 ============================= 作用域功能快捷键 全局单步返回F7 全局单步跳过F6 全局单步跳入F5 全局单步跳入选择Ctrl+F5 全局调试上次启动F11 全局继续F8 全局使用过滤器单步执行Shift+F5 全局添加/去除断点Ctrl+Shift+B 全局显示Ctrl+D 全局运行上次启动Ctrl+F11 全局运行至行Ctrl+R 全局执行Ctrl+U ============================= 1.Step Into (also F5) 跳入 2.Step Over (also F6) 跳过 3.Step Return (also F7) 执行完当前method,然后return跳出此

method 4.step Filter 逐步过滤一直执行直到遇到未经过滤的位置或断点(设置Filter:window-preferences-java-Debug-step Filtering) 5.resume 重新开始执行debug,一直运行直到遇到breakpoint。 例如:A和B两个断点,debug过程中发现A断点已经无用,去除A 断点,运行resume就会跳过A直接到达B断点。 6.hit count 设置执行次数适合程序中的for循环(设置breakpoint view-右键hit count) 7.inspect 检查运算。执行一个表达式显示执行值 8.watch 实时地监视对象、方法或变量的变化 9.我们常说的断点(breakpoints)是指line breakpoints,除了line breakpoints,还有其他的断点类型:field(watchpoint)breakpoint,method breakpoint ,exception breakpoint. 10.field breakpoint 也叫watchpoint(监视点) 当成员变量被读取或修改时暂挂 11.添加method breakpoint 进入/离开此方法时暂挂(Run-method breakpoint) 12.添加Exception breakpoint 捕抓到Execption时暂挂(待续...) 断点属性: 1.hit count 执行多少次数后暂挂用于循环 2.enable condition 遇到符合你输入条件(为ture\改变时)就暂挂 3.suspend thread 多线程时暂挂此线程 4.suspend VM 暂挂虚拟机 13.variables 视图里的变量可以改变变量值,在variables 视图选择变

断点回归设计的步骤

近在做一个需要利用断点回归设计的研究。为了保证实践的规范性,并且避免未来审稿中可能面对的质疑,花了几天时间梳理了一下断点回归设计的标准操作,整理出来,供来人参考。本文参考了三篇文献,先摆在这里,建议大家去读原文: 第一篇:Lee, and Lemieux, 2010," Regression Discontinuity Designs in Economics ",Journal of Economic Literature, Vol. 48: 281–355. 第二篇:Pinotti, Paolo. "Clicking on heaven's door: The effect of immigrant legalization on crime." American Economic Review107.1 (2017): 138-68. 第三篇:Thoemmes, Felix, Wang Liao, and Ze Jin. "The Analysis of the Regression-Discontinuity Design in R." Journal of Educational and Behavioral Statistics 42.3 (2017): 341-360. 1.断点回归常规操作流程 第1步检查配置变量(assignment variable,又叫running variable、forcing variable)是否被操纵。这里的配置变量,其实就是RD中决定是否进入实验的分数(Score),是否被操纵的意思就是,是否存在某种跳跃性的变化。在实际操作中有两种方式来检验,一是画出配置变量的分布图。最直接的方法,是使用一定数量的箱体(bin),画出配置变量的历史直方图(histogrm)。为了观察出分布的总体形状,箱体的宽度要尽量小。频数(frequencies)在箱体间的跳跃式变化,能就断点处的跳跃是否正常给我们一些启发。从这个角度来说,最好利用核密度估计做出一个光滑的函数曲线。二是利用McCrary(2008)的核密度函数检验。(命令是DCdensity,介绍见陈强编著的《高级计量经济学及Stata应用》(第二版)第569页), Frandsen (2013)提出了一种新的检验方法,但目前被使用 的并不多。 第2步画因变量均值对配置变量的散点图,并选择带宽(bandwidth selection)。首先,挑选出一定数目的箱体,求因变量在每个箱体内的均值,画出均值对箱体中间点的散点图。一定要画每个箱体平均值的图。如果直接画原始数据的散点图,那么噪音太大,看不出潜在函数的形状。不要画非参数估计的连续统,因为这个方法自然地倾向于给出存在断点的印象,尽管总体中本来不存在这样的断点。然后,选择第三步骤中需要的带宽。Lee和Lemieux(2010)介绍了两种确定最优带宽的方法:拇指规则法(rule of thumb)和交叉验证法(CV)。还有另外两种比较受关注的方法:IK法和CCT法。IK法以Imbens和Kalyanaraman两个人命名,对应着论文Imbens和Kalyanaraman(2012)。这篇论文发表在Review of Economic Studies,Lee和Lemieux(2010)文中提到过此文2009年的NBER工作论文版。CCT法以Calonico、Cattaneo和Titiunik三个人命名,对应着论文Calonico、Cattaneo和Titiunik(2014a)。用非参数法做断点回归估计时的stata命令rd,就是用IK发确定最优带宽。stata命令rdrobust、rdbwselect,提供CV、IK、CCT三种不同的最优带宽计算方法选项。但是实际上rdrobust中已经更新了IK带宽选择函数,更新的算法与IK算法的区别有待考证,后续会补充。实际操作中一般是两种算法都会采纳,并汇报参数估计对带宽选择是不敏感的。

experiment 用OD下消息断点, 捕获按钮操作.

experiment 用OD下消息断点, 捕获按钮操作. 实验目的: 想直接拦截按钮操作的消息处理, 分析按钮操作的逻辑. 实验程序: <<使用OllyDbg从零开始Cracking 第一章翻译>> 中附带的一个CrackMe. 使用OD加载目标程序, 当程序运行起来后, 暂停OD 经过实验, 点击菜单会触发主窗体WM_COMMAND消息. 如果直接捕获弹出的注册窗口的WM_COMMAND, 捕获不到. 准备捕获主窗体的WM_COMMAND消息, 找到菜单生成注册窗体的处理. 找到注册窗体的创建函数传入的注册窗口处理过程,从而找到注册窗体的所有消息处理实现逻辑.点击菜单属于 WM_COMMAND, 按照消息名称排序, 好找一些.下完消息断电后, 确认一下是否消息断点已下.F9, 让程序跑起来. 点击注册菜单. 程序被断在WM_COMMAND消息断点处.[cpp] view plaincopy00401128 > $ C8 000000 ENTER 0,0 ; 主窗体消息断点WM_COMMAND 0040112C . 56 PUSH ESI 0040112D . 57 PUSH EDI 0040112E . 53 PUSH EBX

0040112F . 837D 0C 02 CMP DWORD PTR SS:[EBP+C],2 00401133 . 74 5E JE SHORT CRACKME.00401193 00401135 . 817D 0C 040200>CMP DWORD PTR SS:[EBP+C],204 0040113C . 74 65 JE SHORT CRACKME.004011A3 F8往下走,找到创建注册窗体的代码. [cpp] view plaincopy00401209 > 6A 00 PUSH 0 ; /lParam = NULL 0040120B . 68 53124000 PUSH CRACKME.00401253 ; |DlgProc = CRACKME.00401253 00401210 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hOwner 00401213 . 68 15214000 PUSH CRACKME.00402115 ; |pTemplate = "DLG_REGIS" 00401218 . FF35 CA204000 PUSH DWORD PTR DS:[4020CA] ; |hInst = 00400000 0040121E . E8 7D020000 CALL <JMP.&USER32.DialogBoxParamA> ; \DialogBoxParamA CRACKME.00401253 是注册窗体的消息处理过程. 转到那看看.[cpp] view plaincopy00401253

WinDBG技巧:设断点命令详解

WinDBG技巧:设断点命令详解(bp, bu, bm, ba 以及bl, bc, bd, be) WinDBG 提供了多种设断点的命令:bp, bu, bm, ba bp命令是在某个地址下断点,可以bp 0x7783FEB 也可以bp MyApp!SomeFuncti on。对于后者,WinDBG 会自动找到MyApp!SomeFunction对应的地址并设置断点。但是使用bp的问题在于:1)当代码修改之后,函数地址改变,该断点仍然保持在相同位置,不一定继续有效;2)WinDBG 不会把bp断点保存工作空间中。所以,我比较喜欢用bu 命令。 bu 命令是针对某个符号下断点。比如bu MyApp!SomeFunction。在代码被修改之后,该断点可以随着函数地址改变而自动更新到最新位置。而且bu 断点会保存在Win Dbg工作空间中,下次启动Windbg 的时候该断点会自动设置上去。 另外,在模块没有被加载的时候,bp 断点会失败(因为函数地址不存在),而bu 断点则可以成功。新版的WinDBG中bp失败后会自动被转成bu 。 bm命令也是针对符号下断点。但是它支持匹配表达式。很多时候你下好几个断点。比如,把MyClass 所有的成员函数都下断点:bu MyApp!MyClass::*,或者把所有以CreateWindow开头的函数都下断点:bu user32!CreateWindow* 。 以上三个命令是对代码下断点,我们还可以对数据下断点。 ba命令就是针对数据下断点的命令,该断点在指定内存被访问时触发。命令格式为 ba Access Size [地址] Access 是访问的方式,比如e(执行),r(读/写),w(写) Size是监控访问的位置的大小,以字节为单位。值为1、2或4,还可以是8(64位机)。 比如要对内存0x0483DFE进行写操作的时候下断点,可以用命令ba w4 0x0483DFE 这里顺便提以下其他断点命令: bl列出所有断点

OD破解常用方法

[分享] OD破解常用方法[复制链接] 一、概论 壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳两种 顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。当然加密壳的保护能力要强得多! 二、常见脱壳方法 预备知识 1.PUSHAD (压栈)代表程序的入口点, 2.POPAD (出栈)代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近 3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以立刻脱壳。 方法一:单步跟踪法 1.用OD载入,点“不分析代码!” 2.单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现!(通过F4) 3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选) 4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现! 5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP 6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入 7.一般有很大的跳转(大跨段),比如jmp XXXXXX 或者JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。 Btw:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键-->“跟随”,然后F2下断,Shift+F9运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。一般情况下可以轻松到达OEP! 方法二:ESP定律法 ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!) 1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)。(这只是一般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值) 2.在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者是hr XXXXXXXX),按回车! 3.选中下断的地址,断点--->硬件访--->WORD断点。 4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP。

VS环境断点调试技巧_85920453_597709898

VS环境断点调试技巧 设置断点:在如下图中的红色圆点处设置断点,红色圆点表示已经在这行设置断点。 启动调试:按F5或者点击左边红框中的按钮。右边框是开始执行(不调试)Ctrl+F5。 调试工具栏:下面是工具栏中对应的名称和快捷键。 在调试过程中F5是执行到下一个断点。F11是逐语句,在执行到下图中的断点时,按F11会执行到Fibonacci方法里面逐步记录执行过程。F10是逐过程,与逐语句不同的是,在执行到下图中断点时,再执行会执行断点下面的语句,而不是去执行语句中的方法。

局部变量:在调试过程中可以查看局部变量窗口,如下图里面会有变量的当前状态。如果找不到的话在 数组的状态表示如下图: InteliTrace记录每一步的调试状态。

条件中断 开发人员设置断点,运行程序,利用不同的输入触发断点,然后在断点处手工检查是否满足某些特定的条件,从而决定是否继续调查。如果当前场景不是他们想要的,按F5继续运行程序,尝试别的输入,手动重复刚才的过程。 针对上述情况,Visual Studio提供了一个方便得多的功能——“条件中断”。只有当程序满足了开发人员预设的条件后,条件断点才会被触发,调试器中断。这将避免频繁地手工检查/恢复程序运行,大量减少调试过程中的手工和烦琐工作。 如何设置条件断点: 设置条件断点非常容易。在特定的行上,按F9设置断点。 然后右击断点–编辑窗口左侧的红点,在上下文菜单上选择“条件”。 这时弹出一个对话框供你设置激活该断点所需的条件。比如:我们希望只有当x==5时,调试才中断。我们可以写出如下的表达式:

现在我再运行这个程序按F5达到条件断点,只有当x等于5时,程序运行才会被中断。对于其它条件下的x值,断点将被跳过。 记录到达断点次数 有时你希望,只有当第N次满足条件的运行到达断点时,才中断程序运行。例如:当第一次命中断点。可以通过右击断点,然后在弹出菜单上选择“命中次数”菜单命令实现。 这时系统弹出一个对话框,它允许你指定:(1)当满足条件,而且进入断点的累计次数等于N时,断点命中一次。(2)当满足条件,而且进入断点的累计次数是N的倍数时,断点命中一次。(3)当满足条件,而且进入断点的累计次数大于N时,每次命中断点。 注意:如果多个条件同时用的话,结果取交集。

STVD在调试的时候出现无法设置断点的问题

STVD在调试的时候出现无法设置断点的问题,提示One or more breakpoints are not positioned in valid files (no debug information or not a project file) --------------------------- ST Visual Develop --------------------------- One or more breakpoints are not positioned in valid files (no debug information or not a project file). These breakpoints have been removed. ---------------------------一个或多个断点未放置在有效文件(没有调试信息,或者不是一个项目文件)。这些断点已被删除(谷歌翻译)。 上图,如果点击确定,设置的断点便被清除,同时也会发现,右侧的反汇编窗口不能同时显示具体的汇编信息是由那句C语句生成的。 如果要设置断点,需要在Debug环境下才能放置断点。在Release环境下可以进行在线仿真,但是不能放置断点,并且仿真暂停的时候,也不知道程序停在了什么地方,不能进行单步调试等等。如下图:

1.一般情况下,我们新建的工程,都是在Release环境下建工程。并且project>settings中, 只在Release环境的设置,忽略了Debug的设置。如果在Release环境下进行了其他设置,同样的Debug下也要同样的设置。不然在调试环境下,无法通过编译,更不用提在线仿真,设置断点的问题。 2.一般进行程序编写编译的时候在Release环境中操作,此时可以进行在线仿真,但是无 法设置断点,给程序的调试带来很大的障碍,STVD环境下的设置方法如下,打开 project>settings,如下如: 此处默认设置,一般不做更改,是为了避免最后发行使用的程序忘记修改此处,避免编译的程序不是最优的。 在Debug环境下,如下图:

od破解调试秘籍断点

拦截窗口: bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWindow 更新窗口 bp GetWindowText(A) 获取窗口文本 拦截消息框: bp MessageBox(A) 创建消息框 bp MessageBoxExA 创建消息框 bp MessageBoxIndirect(A) 创建定制消息框 拦截警告声: bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声) 拦截对话框: bp DialogBox 创建模态对话框 bp DialogBoxParam(A) 创建模态对话框 bp DialogBoxIndirect 创建模态对话框 bp DialogBoxIndirectParam(A) 创建模态对话框 bp CreateDialog 创建非模态对话框 bp CreateDialogParam(A) 创建非模态对话框 bp CreateDialogIndirect 创建非模态对话框 bp CreateDialogIndirectParam(A) 创建非模态对话框 bp GetDlgItemText(A) 获取对话框文本 bp GetDlgItemInt 获取对话框整数值 拦截剪贴板: bp GetClipboardData 获取剪贴板数据 拦截注册表: bp RegOpenKey(A) 打开子健 bp RegOpenKeyEx 打开子健 bp RegQueryValue(A) 查找子健 bp RegQueryValueEx 查找子健 bp RegSetValue(A) 设置子健 bp RegSetValueEx(A) 设置子健 功能限制拦截断点: bp EnableMenuItem 禁止或允许菜单项 bp EnableWindow 禁止或允许窗口 拦截时间:

OD里SHIFT+F4条件断点用法篇

致菜鸟: OD里SHIFT+F4条件断点用法篇 发帖人:pjb 时间: 2005-08-24 20:25 原文链接:https://www.doczj.com/doc/d61701298.html,/showthread.php?threadid=16494 高手就不必看了~,若有错误的地方请指正! 先说一点ALT+L 看记录~ 在某条语句上按了SHIFT+F4后出现了个对话框, 1)第一行是"条件": 要输入的肯定是你感兴趣的条件啦,比如说下面的俩句 0041150 push eax 0041151 call [TranslateMessage] 你在0041150处下条件记录中断,假如这时候你要是想知道ESI等不等于0,那就可以设置条件ESI==0 或ESI!=0 反正是关于ESI的条件了而不是只能利用这行的EAX. 当然一样可以在0041150处下断追消息,比如说你想知道按了鼠标移动消息,那么就设置MSG==WM_ MOUSEMOVE 或是MSG==0200(移动的数字代码). 有人该问了,消息记录好象应该在下一行有函数的下断才正确吧? 其实不一定非要在传递消息的那行0041151下断的,但在那行下断的好处是可以记录到函数参数,这在下面会讲到~

"条件"这的书写是按照MASM32汇编的形式书写的,比如== != > < 2)"说明"="表达" "解码表达式的值" "说明"就是个注释啦,添不添无所谓了,除非你下的记录中断比较多,这样在记录里能看的明白~ "表达"其实就是我们记录的核心啦,程序在我们第1小条里的"条件"为真的时候,就会记录我们在"表达"里填的内容,比如说ESI==0的时候,我们记录[eax+4]的值 反正是你感兴趣的内容啦,若是想记录消息就添MSG 啦,很多时候我们只添了"条件"而没有添"表达",程序中断后就会显示"未知的函数或标识符!",这就是原因了. 至于下面的"解码表达式的值"你可以随便选了,他不过是把记录后的数据又分析了一下, 比如说我们记录了[eax+4]的值是201 ,那么当你选" 信息代码(WM_XXX)"的时候那么你在记录(ALT+L看记录)里看到的就是被分析成了201 WM_LBUTTONDOWN 当你选"布尔数值",那么记录里数值201后面就会跟个TRUE了,其实就是OD对这个数据按照我们选择的类型又进行了一次分析而已~~ 3)暂停程序=> 永不条件满足时永远 这三个选择就是条件为真记录表达的时候程序暂不暂停程序,那就看你调试的需要了~ 4)记录表达式的值=> 永不条件满足时永远 呵呵,要是选"永不",那么我们设立记录"表达"还有啥意义啊, 若是选"永远",那么条件似乎不就没意义了,因为记录的时候已经不管条件了,只要运行到这就记录表达.不过好象也可以利用的,自己去想想啦..我不说. 一般都是选"条件满足"啦. 5)记录函数参数=> 永不条件满足时永远 这个要是你下在没函数的那行,那么这行就变灰了~~ 记录函数的参数很有意义啊,直接可以看到很多信息,我们比如说在有函数的那行下条件记录."条件"是EAX==0 "表达"是[EAX+ 4],然后在这选择记录函数参数在"条件满足时";当然你若只想记录运行到此处的函数参数,那么就空着" 条件"和"表达"吧,同时3)和4)的选择也要变为"永不"了...也许你在记录了啥也看不到,因为运行到这行可能EAX总不=0 ,那么好换换EAX>0 ,好象看了到一堆,然后还有P MSG=XXXX Hw=XXXX,这就是运行到这里这个函数的参数啦~~ 我们也可以记录CREA TFILEA 函数,那么就知道都打开什么文件了~~

黑马程序员java教程:断点调试模式运行java程序

断点调试模式运行java程序 1断点调试的目的 ●跟踪源代码; ●观察程序运行状态; 2调试程序1 编写求和代码 ●设置断点; ●debug运行; ●进入debug透视图; ●程序会运行到断点处停住; ●当前行还没有运行; ●查看变量值:选中变量→鼠标右键→Watch; ●F5(跳入)、F6(跳过)、F7(跳出); 3调试程序2 使用Arrays.binarySearch()编写折半搜索数组元素代码 ●设置断点; ●测试跳入; ●测试跳过; ●测试跳出; ●添加断点; ●测试进入下一断点; ●测试返回当前方法栈的头部(Drop To Frame); ●清除断点; ●清除表达式; ●注意,停止程序! MyEclipse快捷键 1MyEclipse常用快捷键1 ●Alt + /(内容助理):补全; ●Ctrl + 1(快速定位):出错时定位错误,与点击“红X”效果一样;

●Ctrl + Shift + O:导包; ●Ctrl + Shift + F:格式化代码块; 2MyEclipse常用快捷键2 ●Ctrl + Shift + T:查看源代码; ●Ctrl + 点击源代码:查看源代码; ●F3:查看选中类的源代码; ●Alt + 左键:查看源代码时的“原路返回”; ●Ctrl + Shift + X:把小写修改为大写; ●Ctrl + Shift + Y:把小写修改为小写; ●Ctrl + Alt + 下键:复制当前行; ●Ctrl + /:添加或撤销行注释; ●Ctrl + Shift + /:对选中代码添加段注释; ●Ctrl + Shift + \:撤销当前段注释; ●Alt + 上键:向上移动当前行; ●Alt + 下键:向上移动当前行; ●Ctrl + D:删除当前行; MyEclipse: ●工作空间; ●项目名称; ●包名; ●类名; ●Alt + /、Ctrl + 1、Ctrl + shift + o、Ctrl + shift + f

keil c 的在线调试与断点设置

Keil 的调试命令、在线汇编与断点设置 上一讲中我们学习了如何建立工程、汇编、连接工程,并获得目标代码,但是做到这一步仅仅代表你的源程序没有语法错误,至于源程序中存在着的其它错误,必须通过调试才能发现并解决,事实上,除了极简单的程序以外,绝大部份的程序都要通过反复调试才能得到正确的结果,因此,调试是软件开发中重要的一个环节,这一讲将介绍常用的调试命令、利用在线汇编、各种设置断点进行程序调试的方法,并通过实例介绍这些方法的使用。 一、常用调试命令 在对工程成功地进行汇编、连接以后,按Ctrl+F5 或者使用菜单 Debug->Start/Stop Debug Session 即可进入调试状态,Keil 内建了一个仿真CPU 用来模拟执行程序,该仿真CPU 功能强大,可以在没有硬件和仿真机的情况下进行程序的调试,下面将要学的就是该模拟调试功能。不过在学习之前必须明确,模拟毕竟只是模拟,与真实的硬件执行程序肯定还是有区别的,其中最明显的就是时序,软件模拟是不可能和真实的硬件具有相同的时序的,具体的表现就是程序执行的速度和各人使用的计算机有关,计算机性能越好,运行速度越快。 进入调试状态后,界面与编缉状态相比有明显的变化,Debug 菜单项中原来不能用的命令现在已可以使用了,工具栏会多出一个用于运行和调试的工具条,如图1 所示,Debug 菜单上的大部份命令可以在此找到对应的快捷按钮,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令。 接着执行下一行程序,中间不停止,这样程序执行的速度很快,并可以看到该 段程序执行的总体效果,即最终结果正确还是错误,但如果程序有错,则难 以确认错误出现在哪些程序行。单步执行是每次执行一行程序,执行完该行 程序以后即停止,等待命令执行下一行程序,此时可以观察该行程序执行完 以后得到的结果,是否与我们写该行程序所想要得到的结果相同,借此可以 找到程序中问题所在。程序调试中,这两种运行方式都要用到。 使用菜单STEP 或相应的命令按钮或使用快捷键F11 可以单步执行程序, 使用菜单STEP OVER 或功能键F10 可以以过程单步形式执行命令,所谓 过程单步,是指将汇编语言中的子程序或高级语言中的函数作为一个语句来

OllyDBG常用API断点非常实用

OllyDbg常用断点 以前收集的资料,不知道作者是谁了。很抱歉! --liuyunagang OD常用断点 常用断点(OD中) 拦截窗口: bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWindow 更新窗口 bp GetWindowText(A) 获取窗口文本 拦截消息框: bp MessageBox(A) 创建消息框 bp MessageBoxExA 创建消息框 bp MessageBoxIndirect(A) 创建定制消息框 bp IsDialogMessageW 拦截警告声: bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声) 拦截对话框: bp DialogBox 创建模态对话框 bp DialogBoxParam(A) 创建模态对话框 bp DialogBoxIndirect 创建模态对话框 bp DialogBoxIndirectParam(A) 创建模态对话框 bp CreateDialog 创建非模态对话框 bp CreateDialogParam(A) 创建非模态对话框 bp CreateDialogIndirect 创建非模态对话框 bp CreateDialogIndirectParam(A) 创建非模态对话框 bp GetDlgItemText(A) 获取对话框文本 作用是得指定输入框输入字符串 bp GetDlgItemInt 获取对话框整数值 拦截剪贴板:

bp GetClipboardData 获取剪贴板数据 拦截注册表: bp RegOpenKey(A) 打开子健 bp RegOpenKeyEx 打开子健 bp RegQueryValue(A) 查找子健 bp RegQueryValueEx 查找子健 bp RegSetValue(A) 设置子健 bp RegSetValueEx(A) 设置子健 功能限制拦截断点: bp EnableMenuItem 禁止或允许菜单项 bp EnableWindow 禁止或允许窗口 拦截时间: bp GetLocalTime 获取本地时间 bp GetSystemTime 获取系统时间 bp GetFileTime 获取文件时间 bp GetTickCount 获得自系统成功启动以来所经历的毫秒数 bp GetCurrentTime 获取当前时间(16位) bp SetTimer 创建定时器 bp TimerProc 定时器超时回调函数 GetDlgItemInt 得指定输入框整数值 GetDlgItemText 得指定输入框输入字符串 GetDlgItemTextA 得指定输入框输入字符串 拦截文件: bp CreateFileA 创建或打开文件 (32位) bp OpenFile 打开文件 (32位) bp ReadFile 读文件 (32位) bp WriteFile 写文件 (32位) GetModuleFileNameA GetFileSize Setfilepointer fileopen FindFirstFileA ReadFile 拦截驱动器: bp GetDriveTypeA 获取磁盘驱动器类型 bp GetLogicalDrives 获取逻辑驱动器符号 bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径 ★★VB程序专用断点★★

附录:程序的调试(单步执行与断点法)

附录:程序的调试(单步执行与断点法) 1单步执行 任何一个天才都不敢说,他编的程序是100%正确的。几乎每一个稍微复杂一点的程序都必须经过反复的调试,修改,最终才完成。所以说,程序的调试是编程中的一项重要技术。我们现在就来掌握一下基本的程序调试。我们以下的示范,是以时下比较流行的Borland Pascal 7.0为例子,其他的编程环境可能略有不同,但大致上是一致的。 我们先编一个比较简单的程序,看看程序是如何调试的。program tiaoshi; var i:integer; begin for i:=1 to 300 do

begin if i mod 2 = 0 then if i mod 3 = 0 then if i mod 5 = 0 then writeln(i); end; end. 该程序是输出300以内同时能被2,3,5整除的整数。现在我们开始调试。调试有多种方法,先介绍一种,权且叫步骤法,步骤法就是模拟计算机的运算,把程序每一步执行的情况都反映出来。通常,我们有F8即STEP这个功能来实现,如图:不断地按F8,计算机就会一步步地执行程序,直到执行到最后的“end.”为止。

可能你还没有发现F8的威力,我们不妨把上面的程序略微修改一下,再配合另外的一种调试的利器watch,你就会发现步骤法的用处。 program tiaoshi; var i:integer; a,b,c:boolean; begin for i:=1 to 300 do begin a:=false; b:=false; c:=false; if i mod 2 = 0 then a:=true; if i mod 3 = 0 then b:=true; if i mod 5 = 0 then c:=true; if a and b and c then writeln(i); end; end. 如图,我们单击菜单栏中debug选项,里面有一项叫watch的选项,我们单击它。

OpenStack 断点调试方法总结(其他 Python 程序同样适用)

1、断点调试的目的和工具 断点是调试应用程序最主要的方式之一,通过设置断点,可以实现单步执行代码,检查变量的值以及跟踪调用栈,甚至修改进程的内存变量值或者运行代码,从而观察修改后的程序行为。 大多数的调试器都是通过ptrace系统调用控制和监视进程状态,通过INT 3软件中断实现断点。当我们在代码中插入一个断点时,其实就是调试器找到指令位置(编译成机器码后的位置)嵌入一个INT 3指令,进程运行时遇到INT 3指令时,操作系统就会将该进程暂停,并发送一个SIGTRAP信号,此时调试器接收到进程的停止信号,通过ptrace查看进程状态,并通过标准输入输出与用户交互,更多关于断点和调试信息实现原理可以参考国外的一篇文章How debuggers work【1】,这里只需要注意调试器是通过标准输入输出(stdin、stdout)与用户交互的。 目前主流的调试工具如gdb、jdb以及针对Python语言的pdb等。本文接下来主要介绍的是针对OpenStack的一些调试方法,这些方法不仅适用于OpenStack,其他Python程序同样适用。 2、Python 调试工具介绍 Python主要使用pdb工具进行调试,用法也很简单,只要在需要打断点的位置嵌入pdb.set_trace()代码即可。 比如如下Python代码:

该代码相当于在say()函数第一行嵌入了一个断点,当代码执行到该函数时,会立即停止,此时可以通过pdb执行各种指令,比如查看代码、查看变量值以及调用栈等,如下:

当然你也可以使用ipdb替换pdb,界面更友好,支持语法高亮以及命令自动补全,使用体验类似于ipython,如图2-1:

程序调试常用断点

网络验证断点: bp send bp recv bp connect bp WSASend bp WSARecv 拦截窗口: bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWindow 更新窗口 bp GetWindowText(A) 获取窗口文本 拦截消息框: bp MessageBox(A) 创建消息框 bp MessageBoxExA 创建消息框 bp MessageBoxIndirect(A) 创建定制消息框 bp IsDialogMessageW 拦截警告声: bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声) 拦截对话框: bp DialogBox 创建模态对话框 bp DialogBoxParam(A) 创建模态对话框 bp DialogBoxIndirect 创建模态对话框 bp DialogBoxIndirectParam(A) 创建模态对话框 bp CreateDialog 创建非模态对话框 bp CreateDialogParam(A) 创建非模态对话框 bp CreateDialogIndirect 创建非模态对话框 bp CreateDialogIndirectParam(A) 创建非模态对话框 bp GetDlgItemT ext(A) 获取对话框文本 bp GetDlgItemInt 获取对话框整数值 拦截剪贴板: bp GetClipboardData 获取剪贴板数据 拦截注册表: bp RegOpenKey(A) 打开子健 bp RegOpenKeyEx 打开子健 bp RegQueryValue(A) 查找子健 bp RegQueryValueEx 查找子健

相关主题
文本预览
相关文档 最新文档