程序调试

Day-10: 错误、调试和测试

百般思念 提交于 2019-12-23 02:06:04
  程序运行时,会遇到各种各样的错误。   编写错误叫做bug,而另一类由于运行过程中无法预测的,比如写文件时,磁盘满了,写不进去;或者从网络抓取数据,网络突然掉了。这些错误称为异常,程序中需要对异常进行处理,使得程序能够运行下去。 错误处理   Python中,程序运行错误时,如果错误没有捕获,它会一直往上抛,最后被Python解释器捕获,打印一个错误。 # err.py: def foo(s): return 10 / int(s) def bar(s): return foo(s) * 2 def main(): bar('0') main() $ python err.py Traceback (most recent call last): File "err.py", line 11, in <module> main() File "err.py", line 9, in main bar('0') File "err.py", line 6, in bar return foo(s) * 2 File "err.py", line 3, in foo return 10 / int(s) ZeroDivisionError: integer division or modulo by zero 从上到下,错误会一层层的反馈,直到显示最终出错的地方。   try..

Linux的Core文件设置与调试

烂漫一生 提交于 2019-12-21 23:16:52
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、运行时错误 任何人写程序都会出错,正如《C++编程规范》所说,真正可怕的错误不是编译时的错误,而是运行时错误。 有的程序可以通过编译, 但在运行时会出现Segment fault(段错误) 这通常都是指针错误(一般就是空指针)引起的,或者访问了不能访问的内存(数组越界,系统保护) 二、core文件 我们不可能用GDB一句一句的去找,真正的英雄都善于使用手中的武器。这就是core file 所谓core,就是当程序down掉的时候,操作系统把程序的内存内容dump下来,这个动作就是core dump,动作的结果就是core文件 产生: 1.程序挂了,操作系统产生 2.通过gcore $pid命令直接导出相应进程的core文件,此命令运行后, 会恢复程序的执行, 不影响程序的运行 3.通过另一个进程发送SIGABRT信号给当前进程, 虽然也能产生core文件,但是程序随着一起终止掉 三、core文件开关设置 1.终端级别 怎么样才能让程序down掉的时候,自动core dump呢?可以通过 ulimit查看和设置 #查看core文件的信息 ulimit -a ju@musicoder:~$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes

2019-2020-1 20175234 20175205 20175217 实验二 固件程序设计

≯℡__Kan透↙ 提交于 2019-12-21 14:27:51
2019-2020-1 20175234 20175205 20175217 实验二 固件程序设计 实验内容 1-MDK 实验要求 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.1-1.5安装MDK,JLink驱动,注意,要用系统管理员身分运行uVision4,破解MDK(破解程序中target一定选ARM) 提交破解程序中产生LIC的截图 提交破解成功的截图 实验步骤 按照实验指导书上的操作进行软件安装 运行 uVision4,点 File>>License Management-->复制 CID 运行keil-MDK注册机(在“Z32开发指南\2.软件资料\keil-MDK 注册机”双击“keil mdk474注册机”) 粘贴 CID 并选择 ARM。 2-LED 实验要求 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.9”完成LED实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图 实验报告中分析代码 实验步骤 首先先在 KEIL-MDK 中添加 Z32 SC-000 芯片库,操作过程为: 打开 keil

每日软件进度报告—11月15日

扶醉桌前 提交于 2019-12-21 01:14:31
昨天构想了一下设计界面,并在网上看了一下简历模板;今天完成了软件的设计界面,算是一个好的开头,同时写了一些基础的代码, 为以后的程序 运行先 铺垫一下,遇到的问题并不多,其中包括一些VS2010的一些陌生控件,对其具体使用方法还不 是太 熟悉,不 过已 经通过查阅书籍资料了解了其功能,相信以后对于其使用会更加熟悉;明天打算进行录入一些基本信息的控件的代码的编写,边调试边 运行。 燃尽图: 来源: https://www.cnblogs.com/zhs20160715/p/9965677.html

Android未root环境下使用IDA调试

送分小仙女□ 提交于 2019-12-20 23:47:53
引言 众所周知,IDA在我们调试Android程序的时候是一个很棒的利器,在做调试前我们需要的就是一部root过的移动设备,当然这是很理想的情况,但是现实总是事与愿违的,对于我们大部分人来说可能会碰到各种各样的问题(技术大牛除外),比如说我是开发人员,我不会root、后者是手机不支持root,没有官方和第三方的root包、还有就是刷root的本身就是一件有风险的事情,如果点背的话刷成板砖了等等;即时最后root成功了,可能你在上面花费的时间远远大于你调试软件的时间。针对root手机的不方便性、我来介绍一种不需要root手机直接调试的方法。 前期准备 配置好JDK, SDK环境变量,并且在开发者模式下开启调试状态 一台未root的手机(我用的是vivo X23) Android Studio IDA (我用的汉化的7.0版本) android:debuggable=“true” 直接上干货 从图片看出我的设备是未root的,没有su权限;接下来我们使用run-as命令操作: 到达这步我们就有权限操作被调试进程了,下面我们把IDA的远程调试服务拷贝到当前进程目录下,然后对我需要的服务进行提权操作,然后就可以正常运行服务了,具体如下图: 从图中看到,已经成功连接IDA的服务了,可以从图中看见我导入了两个服务 android_server 和 android_server64

GDB使用之调试CoreDump

半世苍凉 提交于 2019-12-20 09:26:26
在软件出现问题的时候,有时候没有现场环境让我们来调试,或者是想保存现场环境,以防现场环境被我们给破坏了,导致无法再重现问题。碰到这种情况,我们一般都会把进程给DUMP下来。也可以设置程序崩溃时自动DUMP。 以前一直使用WinDBG来调试Dump文件,分析种种无法重现的问题。来这个由于是在Linux平台上,所有就看GDB是否也有这种功能。 一 、命令 generated core file(gcore) [filename] 产生core dump文件 gdb -c dump文件 调试core dump文件 symbol-file fileName 加载调试符文件 (我试过MinGW中不能使用产生dump文件命令,在Linux上可以,Cygwin我没试,不知道可不可以) 二、例子 1、产生core文件 linux-26u1:/home/project/topcoder# gdb gdb_core_dump GNU gdb (GDB) SUSE(6.8.50.20090302-1.5.18) Copyright (C) 2009Free Software Foundation, Inc. License GPLv3+: GNUGPL version 3 or later < http://gnu.org/licenses/gpl.html> This is freesoftware:

【逆向知识】动态调试技巧-C++代码逆向

为君一笑 提交于 2019-12-20 09:08:08
1、C++类代码的特点 寄存器ECX传参时一般用作this指针(对象地址)或是计数器。 有ecx传参的call,是成员函数,构造函数,析构函数 能访问成员变量的函数都会有ecx传参 静态函数、全局函数无ecx(this指针) 返回值 寄存器eax一般用作返回值 识别构造函数的OD反汇编代码 特点: (1) 代码特点:没有返回值、用于初始化 (2)反汇编特点:有返回值,而且是this指针 根据反汇编可以看出成员变量的顺序,因为在内存数据中的排布顺序是由代码中成员变量定义顺序决定的。 识别构造函数的办法: (1)构造函数调用时,会使用ECX用于this指针 (2)构造函数在反汇编层有返回值,是eax存放this指针 (3)构造函数用于初始化,一般内存如果是未初始化的比如CCCCCCC,经过构造函数会完成初始化。 (4)如果一个函数有对前4字节初始化为一个指针地址,那么可能是在初始化虚函数表指针。 如果一个类有虚函数,那么对象的内存数据里会有虚函数指针的定义。构造函数会初始化虚函数表指针,而类中定义多少个虚函数也只有一个虚函数表指针。 识别成员函数的OD反汇编代码 特点: (1)ECX传递this指针,调用成员函数 (2)成员函数中会访问exc所指向的内存空间 成员函数与虚函数本身没有什么区别,所以反汇编出来的代码都差不多。 识别成员函数: (1)如果找到了构造函数

加快开发效率的方法

一曲冷凌霜 提交于 2019-12-20 08:24:50
此贴仅限于我自己使用,大家有需要自取。 因为目前暴露的久了,被同事发现我开发效率好慢,究其原因,在开发的便捷性上我没有做的很好,甚至连一些常用的快捷键都不了解,更别说使用了。。。。 vscode比较实用的快捷键,而我不用的 ctrl+n新建一个文件 ctrl+o打开一个文件 ctrl+shift+保存并重命名一个文件 ctrl+/多行注释 ctrl+f查找 ctrl+h替换 ctrl+shift+d打开debug ctrl+shift+y打开调试窗口 fn+f5开始调试 继续 / 暂停 F5 跳过 F10 进入 F11 退出 Shift+F11 重新开始 unassigned 停止调试 Shift+F5 还有就是debug,程序调试我总是console.log(),被同事嘲笑了。。。。。。。 debug的时候,有一个配置文件launch.json { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0",

利用GDB进行多线程调试

牧云@^-^@ 提交于 2019-12-19 21:02:43
一、多线程调试 多线程调试重要就是下面几个命令: info thread 查看当前进程的线程。 thread <ID> 切换调试的线程为指定ID的线程。 break file.c:100 thread all 在file.c文件第100行处为所有经过这里的线程设置断点。 set scheduler-locking off|on|step,这个是问得最多的。在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试程序执行呢?通过这个命令就可以实现这个需求。 off 不锁定任何线程,也就是所有线程都执行,这是默认值。 on 只有当前被调试程序会执行。 step 在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行。 二、调试宏 这个问题超多。在GDB下,我们无法print宏定义,因为宏是预编译的。但是我们还是有办法来调试宏,这个需要GCC的配合。 在GCC编译程序的时候,加上 -ggdb3 参数,这样,你就可以调试宏了。 另外,你可以使用下述的GDB的宏调试命令 来查看相关的宏。 info macro – 你可以查看这个宏在哪些文件里被引用了,以及宏定义是什么样的。 macro – 你可以查看宏展开的样子。 三、源文件 这个问题问的也是很多的

android下调试声卡驱动之概述

我怕爱的太早我们不能终老 提交于 2019-12-19 13:12:19
在Android中音频系统使用的是ALSA系统架构。ASoC--ALSA System on Chip 。是建立在标准ALSA驱动层上,为了更好地支持 嵌入式处理器和移动设备中的音频Codec的一套软件体系。在音频设备驱动中ASoC被分为Machine、Platform和Codec三大部分。 Codec部分:负责音频解码,这部分代码全然无平台无关(设备原厂提供),它包括了一些音频的控件(Controls),音频接 口,DAMP(动态音频电源管理)的定义和Codec IO功能。为了保证硬件无关性,不论什么特定于平台的代码都 要移 到Platform和Machine驱动中。 Platform部分:包括了平台的音频DMA和音频接口的配置和控制(I2S,PCM。AC97等); 与处理器芯片相关 的代码。 Machine部分:是耦合Platform和Codec驱动,同一时候与上层交互的代码。因为上层是标准的alsa架构。所下面层接口肯定要做了 统一,这部分由Machine本身的Platform驱动和Platform设备组成(请跟上面的Platform驱动差别开)。Platform驱动 内核已经完毕了,所以无须过多的关心怎么跟上层ALSA怎么衍接的问题。我们仅仅须要注冊一个Machine的Platform 设备以及完毕Platform和Codec耦合。 1、ALSA设备文件结构