断点

在Intellij IDEA中使用Debug

空扰寡人 提交于 2020-04-08 11:50:06
目录 一、Debug开篇 二、基本用法&快捷键 三、变量查看 四、计算表达式 五、智能步入 六、断点条件设置 七、多线程调试 八、回退断点 九、中断Debug 十、附:JRebel激活   Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码。   所以学习下如何在Intellij IDEA中使用好Debug,主要包括如下内容:     一、Debug开篇     二、基本用法&快捷键     三、变量查看     四、计算表达式     五、智能步入     六、断点条件设置     七、多线程调试     八、回退断点     九、中断Debug     十、附:JRebel激活 回到顶部 一、Debug开篇   首先看下IDEA中Debug模式下的界面。   如下是在IDEA中启动Debug模式,进入断点后的界面,我这里是Windows,可能和Mac的图标等会有些不一样。就简单说下图中标注的8个地方:   ① 以Debug模式启动服务,左边的一个按钮则是以Run模式启动。在开发中,我一般会直接启动Debug模式,方便随时调试代码。   ② 断点:在左边行号栏单击左键,或者快捷键Ctrl+F8 打上/取消断点

C++ DLL 获取 MSI Property

99封情书 提交于 2020-04-08 06:41:46
在MSI工程中,经常会遇到这样的情况: MSI 工程需要调用DLL(C++)中的一个函数实现某些特殊或者复杂的功能,通常的做法是在Custom Action 中调用该DLL 。 那么在安装过程中,该Custom Action 被调用的时候,如何使用Visual Studio 逐行Debug DLL 的源代码呢? 答案是:使用VS2010 中的Attach to Process 就可以实现。 步骤如下: 1> VS 工程设置为Debug 模式,并设置断点。 在断点前,弹出一个 dialog ,用来标识debug的 开始位置。以 C++ DLL 获取 MSI Property 中的工程为例。 2> 以 Custom Action : dynamic link library 中的 MSI 工程为例。 编译MSI 工程,运行安装包。 3> 弹出设定的 dialog 时,在VS 工程中选择,Debug / Attach to Process… Msiexec.exe 是windows installer 服务,选择运行MessageBox 的windows installer服务,点击 ”Attach” 。 在VS 工程中,将鼠标移到断点处,可以看到工程和 msiexec.exe 已经关联了起来。 4> 继续安装,在弹出的dialog 中 点击“OK”。 再看VS 工程,程序就停在了断点处

IDEA快捷键总结

与世无争的帅哥 提交于 2020-04-06 12:53:57
文章目录 1. 编辑类快捷键 2. 查找、替换类快捷键 3. 编译、运行类快捷键 4. Debug快捷键 5. 重构快捷键 6. 其他类快捷键 1. 编辑类快捷键 编辑类快捷键 介绍 psvm + Tab 生成main方法 sout + tab 生成输出语句 Ctrl+X / Ctrl + Y 删除一行 Ctrl+D 复制一行 Ctrl+/ 或 Ctrl+Shift+/ 注释代码 Ctrl + Z 撤销 Ctrl + Shift + Z 取消撤销 Ctrl + C 复制 Ctrl + V 粘贴 Ctrl + O 重写方法 Ctrl + I 实现方法 Ctr + shift + U 大小写转化 Ctrl + Shift + J 整合两行为一行 Ctrl + Shift + space 自动补全代码 Alt + 回车 导入包,自动修正 Alt + / 代码提示 Alt + Insert 生成代码(如GET,SET方法,构造函数等) Ctrl + Alt + L 格式化代码 Ctrl + Alt + I 自动缩进 Ctrl + Alt + T 生成try catch Ctrl + Alt + O 优化导入的类和包 fori 生成for循环for (int i = 0; i< ; i++) { } iter 生成增强for循环 itar 生成array for代码块 itit

GDB学习笔记(一):GDB的常用命令(部分)

冷暖自知 提交于 2020-04-01 03:21:32
GDB 主要用来调试 C/C++ 程序。首先,编译时,需要把调试信息加到可执行文件中。可使用编译器的 -g 参数来实现这一点。 如: gcc -g -o hello hello.c 编译成功后,启动 GDB 进行调试。 启动 GDB 的方法: 1.gdb <program> program 是编译后的可执行文件。 2.gdb<program> PID PID 为正在运行的程序进程号,可能根用户才有此权限 3. 先用 gdb<program> 运行,在 GDB 环境中用 attach 命令来挂接进程 PID ,用 detach 命令可取消挂接的程序 启动 GDB 后,可用 help 查看 GDB 命令 (gdb) help List of classes of commands: aliases -- Aliases of other commands breakpoints -- Making program stop at certain points data -- Examining data files -- Specifying and examining files internals -- Maintenance commands obscure -- Obscure features running -- Running the program stack --

我是如何用IDEA调试BUG的?

和自甴很熟 提交于 2020-03-30 13:34:23
最近小明的bug有点多,忙的连王者荣耀都顾不上玩了,导致现在不得不抽点时间研究一下作为当前大多Java程序员开发工具的IDEA DEBUG功能,以提高效率。 一、条件断点 场景:我们在遍历某个集合,期望程序在满足某些预设条件时停住,比如:沐芳老师在课堂上点名,需要在点到小明的时候暂停确认一下是否有人在帮小明答“到”! 那沐芳老师可以这样: 右击断点旁边的小红点(断点),弹出面板,在 Condition 这里填入暂停条件,这样调试时,当程序满足条件时就会稳稳地停在 student= "小明" 的位置。 二、回到"过去" 场景:人非圣贤,孰能无过。在日常开发中,大家都有手残的时候,比如在调试一个业务逻辑比较复杂,有多个方法嵌套时,一不小心手抖,断点过去了,这该怎么办? 这天,沐芳老师如往常一样在上课前点名,当点到小明的时候,不争气的小明在偷偷看喜欢的妹子,没有注意听,当反应过来时,已经错过了答到!十分懊悔(红颜祸水啊),这时小明就可以借用大雄的机器猫进行时光穿梭: 观察上图,我们看到,按照点名顺序,现在沐芳老师点名已经轮到小红,小明已经错过答到,机器猫可以这样帮助小明:点击上图红色框框圈中的 Drop Frame 图标(如果存在多个方法的嵌套调用,可以多点几下),就这样,小明穿越了,没有错过这次的答到: tips :这个按钮之所以叫做 Drop Frame ,是因为 JVM 内部是以

GDB调试——常用命令

天大地大妈咪最大 提交于 2020-03-28 01:09:18
命令 解释 示例 file <文件名> 加载被调试的可执行程序文件。 因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。 (gdb) file gdb-sample r Run的简写,运行被调试的程序。 如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。 (gdb) r c Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。 (gdb) c b <行号> b <函数名称> b *<函数名称> b *<代码地址> d [编号] b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。 其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。如果不了解汇编,可以不予理会此用法。 d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。 (gdb) b 8 (gdb) b main (gdb) b *main (gdb) b *0x804835c (gdb) d s, n s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数; n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”; n 相当于其它调试器中的

【逆向笔记】OD工具使用-逆向TraceMe.exe

两盒软妹~` 提交于 2020-03-26 23:46:03
阅览目录 名词注释 OD快捷键熟悉 逆向之猜 算法逆向 暴力破解 样本引用 回到顶部 名词注释 System breakpoint:系统断点,OllyDbg用CreateProcessA加载DEBUG_ONLY_THIS_PROCESS参数执行,程序运行之后会触发一个INT13,在系统空间里。 Entry point of main module:主模块的入口点,即文件的入口点。 WinMain:程序的WinMain()函数入口点 OD的设置中-选项-事件中设置 OD快捷键熟悉 1、F2 下断点, 2、Alt+b 打开断点编辑器,可编辑所有下过的断点 3、空格键 可快速切换断点状态。 4、Ctrl+F9.当位于某个CALL中,这时想返回到调用这个CALL的地方时,可以按“Ctrl+F9”快捷键执行返回功能。这样OD就会停在遇到的第一个返回命令(如RET、RETF或IRET)。 5、Alt+F9 如果跟进系统DLL提供的API函数中,此时想返回到应用程序领空里,可以按快捷键“Alt+F9”执行返回到用户代码命令。 6、Ctrl+G 跳转到API、地址的位置 逆向之猜 逆向与开发的知识是成正比关系,只有对开发特别熟悉,逆向一个程序才能猜测到该用哪个关键的API才能快速定位到程序的数据处理。 通过PEID查看程序特征,根据程序语言用IDE生成特征或者熟悉开发的API函数

GDB 学习

六月ゝ 毕业季﹏ 提交于 2020-03-25 18:26:41
通常使用gdb在Linux下调试C/C++程序,编译的时候加上-g选项(gcc -g ......)。下面总结的是我自己经常使用(当然也有一些用的比较少)的gdb命令。 (1) 开始及退出 开始: gdb program 退出: quit (简写 q )或者Ctrl+d (2) 自动补全 : Tab (3) 启动程序 : run (简写 r ):运行程序直到遇到断点 与 srart 的区别:start会在程序的入口函数(通常是main)设置一个临时断点,然后调用run。 (4) 断点 (breakpoint):简写b 设置断点: break 函数名:在指定函数入口处设置断点 break 函数名[or 行号 or 地址] if 条件(就是一个布尔表达式,但是不需要加括号) break 行号:在指定行设置断点 break 地址 break filename 行号[or 函数名] break ,无参的话会在下一条指令处设置断点。 删除断点: ( 断点号可由info break获得) delete 断点号。(也可以删除断点的集合:delete 2-5) disable 断点号:暂停使用该断点 enable 断点号:重新启用该断点 clear 行号 or 函数名 :删除指定地点的所有断点(比如clear fun,则删除fun函数中所有的断点) delete breakpoints

大牛都在用的IDEA调试技巧

隐身守侯 提交于 2020-03-24 13:50:20
导读 文章转载自 https://mp.weixin.qq.com/s?__biz=MzI0ODYzMzIwOA==&mid=2247483950&idx=1&sn=22547fb4e1d21851b4d3a1c90e2e7aa3&chksm=e99c8039deeb092f09e716c66af31a4a08dfb918ff201e03778f01ac11b520006fc18e2f0fe9&scene=126&sessionid=1585026418&key=eadb0cb5ef4c1752272952c6f598727fa3f5acf307757ea9d6e2fd02c6f8fe21e7559fb168c6f36eaf3ba9278442bee1db07fc53ad550176a2e79fa3f9a5f460e97d6ccb6826df5c0c56723510258973&ascene=1&uin=MTA3MjI0MTk2&devicetype=Windows+10&version=62080079&lang=zh_CN&exportkey=Ac%2Fs4sUzw9sFrOJ9Y2e4SNg%3D&pass_ticket=fuWdYFindcdGpF10fnKSlQa5NqflzhdeQ6SAdKKpNo0%3D 前天面试了一个985高校的实习生,问了他平时用什么开发工具

基础脱壳学习笔记

懵懂的女人 提交于 2020-03-23 13:46:12
参考资料主要来自网络和视频,理解和笔记自己想的 脱壳的步骤有:分析壳类型 → 找到OEP → DUMP脱壳 → 修复EIP 本文记录的是 找到OEP 方面一些理解后的技巧 方法一:单步跟踪法 1.用OD载入,点“不分析代码” 2.单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现!(通过F4) 3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选) 4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现! 5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP 6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入 7.一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。 理解:单步跟踪法其实主要是脱壳的时候利用F8单步分析,遇到近CALL时候F7跟进,原地循环的时候F4,最后大跳转时候可能就是EIP 主要初级练手学习的思路,也容易理解,壳代码执行过程中会首先解压出以前原始程序的相关资源代码,最后跳到原始程序的入口点(OEP),我们之所以F8就是跳过解压部分。当有时候原地循环一般是释放资源for循环的过程,这不是我们所关心的,我们只关心结果所以就在之后开始运行