断点

JavaWeb中如何进行调试

旧巷老猫 提交于 2020-02-13 17:31:46
调试第一步: 1.将服务器启动为 debug 模式 2.将希望断点的位置上设置断点 3. 运行程序 4.笔记本中,按 Fn+F6 表示下一行, Fn+F8 表示进入下一个断点行,如果 没有断点 了, Fn+F8 表示 运行至程序结束, Fn+F5表示进入方法内部。 断点调试 的好处是可以 提高编码效率 尽量少用 System.out.println(); 这种输出的方式会让代码出现冗余。 怎么打开V ariables查看参数 呢? Window-->show view-->Variables 来源: CSDN 作者: 走到天涯海角 链接: https://blog.csdn.net/weixin_42995083/article/details/104295909

调试lua代码

放肆的年华 提交于 2020-02-11 02:13:51
lua没有调试器,但是它提供了很强的调试功能(debug 库), 所以其实一些常用的调试功能都能很方便的使用,就像使用一个命令行调试器一样: 【例子程序】 -- debug.luagvar1 = 100 function foo() local var2 = 10 function bar() debug.debug() return var2 end bar() end debug.debug() foo() 【设置断点】 这个比较麻烦一点,需要修改代码加入一句: debug.debug() 如果你要条件断点,或者计数断点,没问题,直接写代码就是了 【开始调试】 直接运行就是: lua debug.lua 进入断点显示: [baiyanh@baiyanh-VirtualBox:~/source/arena/lua/PIL/c23-debug.lib] $ lua debug.lua lua_debug> 要继续则运行cont(inue): lua_debug> cont 【打印callstack】 lua_debug> print(debug.traceback()) stack traceback: (debug command):1: in main chunk [C]: in function 'debug' debug.lua:5: in function 'bar'

Lua调试器工作原理

时光总嘲笑我的痴心妄想 提交于 2020-02-10 16:46:25
lua本身提供了回调机制,就是说当某事件产生时去调用指定的函数 事件类型: #define LUA_MASKCALL (1 << LUA_HOOKCALL) #define LUA_MASKRET (1 << LUA_HOOKRET) #define LUA_MASKLINE (1 << LUA_HOOKLINE) #define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT) 由于断点是基于行来指定的,所以调试器基于 LUA_MASKLINE 来做,就是每运行一行代码都会调用指定的回调函数 在回调函数中取得当前运行的文件及行数,与指定的断点进行比较。 当与断点一致时,表示命中断点,暂停lua执行。 参考: lua调试器思路 来源: CSDN 作者: 起个名字真的好难啊 链接: https://blog.csdn.net/e295166319/article/details/104249021

Android Studio代码调试大全

白昼怎懂夜的黑 提交于 2020-02-10 04:12:25
http://blog.csdn.net/dd864140130/article/details/51560664 Android Studio目前已经成为开发android的主要工具,用熟了可谓相当顺手。作为开发者,调试并发现bug,进而解决,可是我们的看家本领。正所谓,工欲善其事必先利其器,和其他开发工具一样,如Eclipse、Idea,Android Studio也为我们提供了强大的调试技巧,今天我们就来看看Android Studio中有关调试的技巧。 首先,来看看Android studio中为我们提供的调试面板(标准情况下): 这里写图片描述 点击右上角Restore ‘Threads’View可先展示目前相关的线程信息: 这里写图片描述 android studio大体为我们提供了7个功能区: 单步调试区 断点管理区 求值表达式 线程帧栈区 对象变量区 变量观察区 下面我们分别对这七个区域进行介绍。 单步调试区 该区提供了调试的主要操作,和你所熟知的一样的,主要有:Step over、step into、force step into、step out、drop frame。 Show Execution Point这里写图片描述 点击该按钮,光标将定位到当前正在调试的位置. Step Over这里写图片描述 单步跳过,点击该按钮将导致程序向下执行一行

OllyDbg学习之路-3

烈酒焚心 提交于 2020-02-10 00:32:18
6.比较和跳转指令 (1)cmp eax,ecx 相当于sub eax,ecx 但不保存结果到第一个操作数。 根据结果改变零标志位(Z)。相等时,零标志位置1。 根据结果正负改变符号标志位(S)。运算结果为负时,置为1。 cmp允许寄存器与byte、word、dword类型的内存单元做比较。 eg:cmp ax,word ptr ds:[405000] (2)test 两个数值进行与操作,结果不保存,改变相应标志位 eg:test eax,eax 这个指令可以确定eax是否为0 (3)关于寻找跳转,容易忽略提示框中的本地调用来自xxx。 7.call、ret (1)ret指令不仅仅可用于子程序的返回,eg: 12 push 401256ret 等价于 1 jmp 401256 (2)改变程序代码后,反汇编界面右键重新分析。(否则分析可能出错,如栈中信息没有分析出函数间调用。) 8.循环、字符串指令和寻址方式 (1)loop [lable] 等价于 cx=cx-1 若cx!=0 转到lable loopz/loope 等价于cx=cx-1 若cx!=0且zf=1 转到lable loopnz/loopne 等价于cx=cx-1 若cx!=0且zf=0 转到lable (2)movs 从一个地址向另一个地址复制数据。源地址保存在ESI寄存器中,目的地址保存在EDI寄存器中。

使用gdb调试

喜夏-厌秋 提交于 2020-02-08 04:18:28
  gdb 是 GNU 发布的一个强大的程序调试工具,也是 Linux 程序员不可或缺的一大利器。 本章我们将给出 gdb 常用的命令的操作说明。 -----------------启动 gdb ------------------ 使用 gdb 的前提: $ gcc -g hello.c -o hello (编译的时候不要忘了-g参数) 启动 gdb 调试: $ gdb hello 然后就可以进入命令行操作,和 Shell 一样 ,gdb 支持命令补全。输入几个字母,按 Tab 键, gdb 会补全命令。按两次 Tab ,会提示所有可能的命令。 另外,其还支持命令缩写,如, h 代表 help 。 ----------------常用命令如下 :--------------- 获取帮组命令 help gdb 将命令分为 12 个大类,使用命令: “ help 子类别”可以查看没类下面的详细帮助。 如: help breakpoints 设置断点 break 命令用于设置断点 , 命令接受行号或者函数名作为参数。 break 也可设置条件断点: 如: break syaHello if count<1 使用 info break 可以查看断点 使用 clear 可以清除断点 运行程序和单步执行 设置完断点后,就可以运行调试程序了,使用 run 命令(缩写为 r) 运行程序至断点。

NS2的GDB调试

 ̄綄美尐妖づ 提交于 2020-02-08 03:36:15
本文所用的NS2版本为2.34,运行在ubuntu10.10环境下,该平台中已经包含了gcc/gdb等工具,这些工具可以用apt-get命令安装,很简单。 一、在NS2中启用GDB调试工具 1. 修改makefile.in:加上-g3选项 .cc.o: @rm -f $@ $(CPP) -g3 -c $(CFLAGS) $(INCLUDES) -o $@ $*.cc .c.o: @rm -f $@ $(CC) -g3 -c $(CFLAGS) $(INCLUDES) -o $@ $*.c 2. 修改Makefile(没有任何后缀的)文件,增加-g标记 CCOPT = -Wall -g -Wno-write-strings 3. 在ns-allinone-2.34/ns-2.34目录下重新编译 make clean touch common/packet.h make 4. 成功后开始进入调试: 转到ns-2.34目录下,cd ~/ns-allinone-2.34/ns-2.34/ gdb ns 然后通过cd命令进入到你的脚本所在的文件目录下,采用命令:r XXX.tcl来运行ns程序。当然这之前你可能需要设置断点。 二、GDB的使用   1常用的gdb命令:        b/break num:在num行设置断点(用于一个文件的程序调试)        b/break file

realloc()与free()函数触发断点的讨论

a 夏天 提交于 2020-02-07 20:56:33
1.由于指针所指位置不同,而导致的断点 void main ( ) { char * str ; str = ( char * ) malloc ( 15 ) ; strcpy ( str , "runoob" ) ; printf ( "string=%s\nadress=%p\n" , str , str ) ; //%p格式符会输出指针本身的值,也就是指针指向的地址值 str = ( char * ) realloc ( str , 25 ) ; str = "string" ; printf ( "string=%s\nadress=%p\n" , str , str ) ; free ( str ) ; system ( "pause" ) ; } 编译输出 由此,我们可以观察到两次str中保存的的地址不同,即指针两次指向不同的内存单元,所以在free时会触发断点 如图所示 再来看一个例子 void main ( ) { int i = 10 ; int * p ; p = ( int * ) malloc ( 20 ) ; printf ( "adress=%p" , p ) ; p = & i ; printf ( "adress=%p" , p ) ; free ( p ) ; } 这是在给指针p分配了空间后又给p赋值 来看编译后的输出 指针所指位置不同

Java中的循环结构

对着背影说爱祢 提交于 2020-02-06 13:27:03
                     循环结构(一) 学习本章会用到的单词: while:循环,当...的时候 do:做,执行,干 index:索引,指标,指出 bug:漏洞,缺陷,计算机程序中的故障 debug:调试,除错,改正有毛病的部分 equal:等于,相等 step:步骤,一步 error:误差,错误 while循环结构   语法:while(循环条件){             //循环操作 }         eg:(举例)int i =1;            while(i<=100){               System.out.println("努力奋斗”);               i = i + 1; }         关键字while后小括号中的内容是循环条件。循环条件是一个表达式,它的值为boolean类型,即true或false,如i<=100.{}中的语句统称为循环操作,又称为循环体。         结合上边的例子,while循环结构的执行顺序:         (1) 声明并初始化循环变量         (2) 判断循环条件是否满足,如果满足则执行循环操作;否则退出循环。         (3) 执行完循环操作后,再次判断循环条件,决定继续执行循环或退出循环。          while循环结构的特点:先判断,在执行。

【pycharm】pycharm断点调试

狂风中的少年 提交于 2020-02-05 14:55:08
step into:单步执行,遇到子函数就进入并且继续单步执行(简而言之,进入子函数); step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。有一点,经过我们简单的调试,在不存在子函数的情况下是和step into效果一样的(简而言之,越过子函数,但子函数会执行)。 step out:当单步执行到子函数内时,用step out就可以执行完子函数余下部分,并返回到上一层函数。 下面以 pycharm IDE 为示例作简要说明: 点击 pycharm 右上部爬虫按钮进入调试状态,程序在第14行断点处停止,按 F5(step into)进入 add() 函数,按 F7(step out) 执行完add()函数余下部分,返回入口函数 debug_test() 继续执行,按 F6(step over) 直接将 divide() 函数执行完。最后单步执行至入口函数结束 来源: https://www.cnblogs.com/dhs94/p/9363130.html