程序调试

汇编学习 - 额外章(用gdb调试nasm汇编程序)

可紊 提交于 2020-03-05 06:25:38
 对于一个程序员来说,调试是很重要的,可以节约找到bug的时间,不过以前在linux下一直是对c进行调试的,今天突然要对汇编进行调试还真不知道怎么调,特别是对linux下调试汇编程序基本没搞过。记得以前上课学masm时,用的是debug,貌似映像中对汇编挺难调试的。于是就在网上查了下在linux下调试nasm汇编程序的资料,看起来比debug简单点。 1 写和编译源文件   首先准备个hello.asm文件,这个学语言必编的程序,代码如下: section .data msg: db "hello, world", 10 len equ $-msg section .text global main main: mov edx, len mov ecx, msg mov ebx, 1 mov eax, 4 ;直接使用sys_write系统调用 int 0x80 mov ebx, 0 mov eax, 1 int 0x80   然后直接敲命令:nasm -f elf -l hello.lst -g hello.asm,-f elf是表示生产elf格式的目标文件,-g 是生产调试信息到目标文件,-l hello.lst对应的是指令和数据在段中偏移量,不要这个也可以。然后直接用命令gcc -g -o hello hello.o连接生成可执行文件,这个和c是一样的。注意在源代码中加:

python-pycharm Debug调试

风流意气都作罢 提交于 2020-03-05 01:34:23
1.设置断点 2.Dubug模式运行文件 3.控制台 4.控制台几个常用按钮: 4.1 下一步,如果当前行调用一个函数,而且调用的函数里没有断点则不进入该函数调试 4.2 ,下一步,如果当前行调用一个函数则会进入到该函数里调试 4.3 结束当前函数的调试,回到上一层函数 4.4 跳到下一个断点进行调试,注意,如果断点在循环内,则是跳到下一次循环 4.5 查看变量的具体信息,如查看上面的列表l 4.6 重新运行程序 4.7 跳到下一个断点,注意,如果断点在循环内,则是跳到下一次循环 4.8 查看断点信息,在弹出框勾选对应的断点使其失效 4.9 屏蔽所有的断点 总结的不是很全面,希望有人评论区补充。 有时会莫名的不能启动dubug,可以尝试删除所有断点试试,再着就是关闭putharm,并且删除工程目录下的.ieda文件夹 来源: CSDN 作者: 猫在大牛身边的小源 链接: https://blog.csdn.net/qq_37398847/article/details/104649805

悄悄地进入Linux内核调试(一)

拟墨画扇 提交于 2020-03-04 22:20:40
悄悄地进入Linux内核调试(一) 本文基址:http://blog.csdn.net/cugxueyu/archive/2007/12/21/1957740.aspx ※ 调试工作艰苦,是内核级开发区别于用户级开发的一个显著特点。 ※ 驾驭内核调试的能力,很大程度上取决于经验和对整个操作系统的把握。 一、调试前的准备 内核级bug具有行为不可靠,定义不清晰或者说很难再现的诸多特定,为内核级的bug跟踪和调试带来了很大的困难。 ※ 对于一些定义不清楚地bug,问题的关键就是找到bug的源头,很多时候,当你精确地重现一个bug的时候,你就离成功不远了。 二、内核中的bug 从隐藏在源代码中的错误到展现在目击者面前的bug,其发作往往是一系列连锁反应的事件才可能出发的。 虽然内核调试有一定的困难,但是通过你的努力和理解,说不定你会喜欢上这样的挑战。 三、printk( ) 内核提供的格式化打印函数。 1、printk函数的健壮性 健壮性是printk最容易被接受的一个特质,几乎在任何地方,任何时候内核都可以调用它(中断上下文、进程上下文、持有锁时、多处理器处理时等)。 ※ 在系统启动过程中,终端初始化之前,在某些地方是不能调用的。 2、记录等级 printk函数可以指定一个记录级别,内核根据这个级别来判断是否在终端上打印消息。 记录级别定义在<linux/kernel.h>中:

在 php 中使用 strace、gdb、tcpdump 调试工具

Deadly 提交于 2020-03-04 15:25:35
转自:http://www.syyong.com/php/Using-strace-GDB-and-tcpdump-debugging-tools-in-PHP.html 在 php 中我们最常使用调试方式是输出打印方式,比如通过 echo、var_dump 输出信息到终端或者通过 fwrite、file_put_contents 将信息写入到文件中。这种普通方式能帮我们解决绝大部分调试问题。但仍然有些问题是需要借助其他工具来分析的,比如死循环,程序执行时间超预期,占用 cpu 过高,php 内核或者扩展错误等场景,这时如果借助 strace、gdb、tcpdump 这样的工具就能很好的去帮助我们定位问题。 strace strace 是 Linux 环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的系统信息。 在 Linux 中,进程是不能直接去访问硬件设备(比如读取磁盘文件,接收网络数据等等),但可以将用户态模式切换至内核态模式,通过系统调用来访问硬件设备。这时 strace 就可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间,调用次数,成功和失败的次数。 比如我们使用 strace 来跟踪 cat 查看一个文件做了什么: [root@syyong home]$ strace cat index.php execve("/bin/cat

Linux strace追踪命令详解

穿精又带淫゛_ 提交于 2020-03-04 15:16:25
strace介绍 strace命令是一个集诊断、调试、统计与一体的工具,我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用工作过程的目的。当然strace与专业的调试工具比如说gdb之类的是没法相比的,因为它不是一个专业的调试器。 strace的最简单的用法就是执行一个指定的命令,在指定的命令结束之后它也就退出了。在命令执行的过程中,strace会记录和解析命令进程的所有系统调用以及这个进程所接收到的所有的信号值。 简单用法 root@ubuntu:/usr# strace cat /dev/null execve("/bin/cat", ["cat", "/dev/null"], [/* 22 vars */]) = 0 brk(0) = 0xab1000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29379a7000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory

eclipse debug技巧

吃可爱长大的小学妹 提交于 2020-03-04 07:50:42
1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoint菜单项即可. 2 在debug模式下运行程序进入调试状态:通过点击工具栏上的小虫按钮或者是在项目右键点击然后选择Debug As,Android Application菜单,启动程序的调试模式. 第一次运行调试模式eclipse会弹出如下确认窗口 当程序运行到你的断点地方时就会停下,这时可以按照下面的功能键按需求进行调试: [1]快捷键(F8)直接执行程序,直到下一个断点处停止。 [2]快捷键(F5)单步执行程序,遇到方法时进入。 [3]快捷键(F6)单步执行程序,遇到方法时跳过。 [4]快捷键(F7)单步执行程序,从当前方法跳出。 查看断点时变量当前的值:右键点击对应的变量,在菜单上选择 watch 菜单项,变量的值就会出现在 expressions窗口中. 来源: https://www.cnblogs.com/tiandee/p/4424152.html

Linux的gdb调试命令(详细)

↘锁芯ラ 提交于 2020-03-04 06:23:22
转自: https://blog.csdn.net/gatieme/article/details/51671430 程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。 本文将主要介绍linux下的强大调试工具是怎么完成这些工作的。 之所以要调试程序,是因为程序的运行结果和预期结果不一致,或者程序出现运行时错误。 调试的基本思想是: 分析现象 -> 假设错误原因 -> 产生新的现象去验证假设 调试器(如GDB)的目的是允许你在程序运行时进入到某个程序内部去看看该程序在做什么,或者在该程序崩溃时它在做什么。 GDB主要可以做4大类事(加上一些其他的辅助工作),以帮助用户在程序运行过程中发现bug。 * 启动您的程序,并列出可能会影响它运行的一些信息 * 使您的程序在特定条件下停止下来 * 当程序停下来的时候,检查发生了什么 * 对程序做出相应的调整,这样您就能尝试纠正一个错误并继续发现其它错误 您能使用GDB调试用C、C++、Modula-2写的程序等GNU Fortran编译器准备好过后,GDB将提供对Fortran的支持 gdb参数选项详解 gcc调试相关编译选项 GDB通过在命令行方式下输入gdb来执行。启动过后,GDB会从终端读取命令,直到您输入GDB命令quit使GDB退出。您能通过GDB命 gcc -g main.c 1

GDB命令详解(进一步学习)

*爱你&永不变心* 提交于 2020-03-03 07:24:23
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。同时GDB也具有例如ddd这样的图形化的调试端。 一般来说,GDB主要完成下面四个方面的功能: (1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 (2)可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) (3)当程序被停住时,可以检查此时你的程序中所发生的事。 (4)动态的改变你程序的执行环境。 兴趣是最好的老师,这里先整理总结一下在调试的过程中经常遇到的问题。带着这些问题进行学习和实践可以有助于加深印象。 再往后是本人实践过程中总结的常见命令,如有什么问题或者建议,都可以联系我,谢谢! _ (1)如何打印变量的值?(print var) (2)如何打印变量的地址?(print &var) (3)如何打印地址的数据值?(print *address) (4)如何查看当前运行的文件和行?(backtrace) (5)如何查看指定文件的代码?(list file:N) (6)如何立即执行完当前的函数,但是并不是执行完整个应用程序?(finish) (7)如果程序是多文件的,怎样定位到指定文件的指定行或者函数?(list file:N) (8)如果循环次数很多,如何执行完当前的循环?

狄慧201771010104《面向对象程序设计(java)》第十四周学习总结

ⅰ亾dé卋堺 提交于 2020-03-03 00:23:05
实验十四 S wing 图形界面组件 实验时间 2017 8 -11-2 9 一、知识点总结 1.模型-视图-控制器模式 模型:储存内容 视图:显示内容 控制器:处理用户输入 2.布局管理 1>局管理器(FlowLayout) JPanel对象的默认布局管理器为FlowLayout,组件加入JPanel中总是处于中央,一行可以排列多个组件,如果一行的空间容纳不下所有的组件则换行。当顶层窗口缩放时,JPanel中组件的大小不会随之缩放。 2>边框布局管理器(BorderLayout) 是JFrame的内容窗格的默认布局管理器,可以选择将空间放在内容窗格的东、南、西、北、中。 且将组件加入其中时,组件会充满其对应的整个区域,如果在这个方位再加入一个组件,会覆盖原本存在的组件。当顶层窗口缩放时,东南西北的组件不会随之变化,中部的组件会等比例变化。 如果要在某方法并排加入几个组件,则可以先将组件加入JPanel中,再放入边框布局管理器。 BorderLayout的常量定义为字符串 frame.add(new JButton("Yes"),BorderLayout.SOUTH); 3>网格布局(Grid Layout) 布局类似于表格,每个单元大小一致,当顶层窗口缩放时组件大小也随之变化,但是尺寸比例保持一致。 frame.SetLayout(new GridLayout(4,4));/

Java程序员应该知道的10个调试技巧

帅比萌擦擦* 提交于 2020-03-02 22:26:33
在开始之前,推荐大家去看看Eclipse shortcuts这篇文章,它将会给你带来很多方便。在本文中使用的是Eclipse Juno版(Eclipse 4.2),在开始前给大家提3点建议! 不要使用System.out.println作为调试工具 把所有涉及到的组件日志级别激活并使用 使用日志分析器来读取日志 1.条件断点 如果你不知道如何添加断点,只需点击左边面板(行号前面)断点即被创建。在调试界面中,“断点”视图会把所有被创建的断点列出来。我们可以给它加一个布尔条件,也就是说,该断点会被激活并且如果布尔条件为真,就会执行该断点,否则将会跳过往下执行。 2.异常断点 在断点视图中,有一个J!标记按钮!我们可以使用该按钮来添加一个Java异常断点。例如,我们想让程序在遇到空指针异常(NullPointerException)时,仍然能继续调试,那么我们可以使用该按钮来添加一个异常断点! 3.监视点 这是一个非常好的功能,当选定的属性访问或修改程序时,程序会停止执行并允许进行调试。在Outline视图中选择一个类变量并从上下文菜单中选择切换监视点,属性监视点将会被创建,在断点(Breakpoints)视图中会把所有监视点用列表的形式显示出来。 4.评估/检查 按Ctrl+Shift+D或者Ctrl+Shift+I来显示选定变量或者表达式的值