程序调试

36.Linux应用调试-使用gdb和gdbserver

回眸只為那壹抹淺笑 提交于 2020-03-01 23:19:04
1.gdb和gdbserver调试原理   通过linux虚拟机里的gdb,来向开发板里的gdbserver发送命令,比如设置断点,运行setp等,然后开发板上的gdbserver收到命令后,便会执行应用程序做相应的动作,来实现调试的功能   和之前学的裸板GDB调试 一样,只不过之前学的是在win下的,本次是在linux里的gdb 1.1同样,它们都会需要一个带调试信息的编译文件.   通过Makefile里的arm-linux-gcc -g 来的, -g:表示编译文件里包含gdb调试信息 1.2为什么需要调试信息的编译文件?   比如读开发板的应用程序里的变量a:   首先gdb通过应用程序的带调试信息的编译文件,来找出变量a存的地址位置   然后将地址发送给开发板里的gdbserver,来读出a地址的值 2.安装gdb和gdbserver   首先进入官网下载gdb-7.4: http://ftp.gnu.org/gnu/gdb/ 2.1在虚拟机上安装GDB: # tar xjf gdb-7.4.tar.bz2 //解压 # cd gdb-7.4/ //进入gdb-7.4目录 # . / configure -- target = arm - linux //GDB需要在pc本机里运行,并调试开发板里的应用程序,所以--target设为arm-linux #make //编译

PCIe调试心得_DMA part2

筅森魡賤 提交于 2020-03-01 22:15:20
作者: East FPGA那点事儿 上一章讲述了PCIe总线DMA的原理和XAPP1052存在的问题。 本章以服务器常用的4通道1000M以太网卡为例讲述如何提高DMA的效率。 1.内存重分配 Windows操作系统会划分一部分硬盘空间作为虚拟内存,将长时间不用得应用程序或内存交换到硬盘中,而释放出一部分内存空间供其他应用程序使用,提高计算机的性能。 或者操作系统会定进行内存碎片整理,将应用程序中零散的内存收集起来重新分配,减少内存碎片。 但是如果被交换或整理的是DMA使用的内存就麻烦了。操作系统已经为该内存重新分配了物理地址,而原内存分配给了其他应用程序,此时DMA再使用该内存,必然导致死机蓝屏现象。XAPP1052就没有很好的解决该问题,在程序中设置禁止将该内存交换到硬盘或整理。 2.内存大小 XAPP1052中申请到的物理连续内存大小为4KB。因为DDR内存内部是以块为单位,最小块为4KB,所以在操作系统中比较容易申请到4KB的物理连续内存。 4KB这个大小太小了。以太网数据小包为64B,大包为1512B,假如连续收到3个大包,那么应该怎样利用4KB的内存呢? 一种方式是一片4KB内存只存放2包数据,剩余内存浪费,第二片4KB内存存放第三包数据;另一种方式是将第三包数据拆分,前一半数据存放在第一片内存,后一半数据存放在第二片内存。 第一种方式将浪费976B,内存利用率非常低

Xcode基本操作

筅森魡賤 提交于 2020-03-01 20:50:03
1.Xcode IDE概览 说明 :从左到右,依次是“ 导航窗格 (Navigator)-> 边列 (Gutter)-> 焦点列 (Ribbon)-> 代码编辑窗口 (Standard/Primary Editor)”。 边列(Gutter ) :显示行号和断点。 焦点列(Ribbon) :灰色深度与代码嵌套深度相关:鼠标悬停可 突出 显示右侧相应代码块( Focus code blocks on hover),鼠标单击可 折叠 右侧相应代码块(Code folding)。 2.偏好设置 通过“command+,”快捷键或”Xcode|Preferences”菜单呼出偏好设置。 (1)主题及字体 (Preferences->Fonts & Colors) 选中一种 主题 ( theme ),例如“Midnight”,推荐使用 Monokai 、 Ciapre 。将 `*. dvtcolortheme ` 文件拷贝到 ` ~/Library/Developer/Xcode/UserData/FontAndColorThemes/ `即可安装主题, 重启 Xcode 即可选用。 Xcode默认字体为menlo,也可选择 Consolas、Monaco、Consolas、Droid Sans Mono、Source Code Pro、Bitstream Vera Sans 等其他等宽字体

Ubuntu 12.10安装Bochs 2.6, 调试linux-0.11内核

主宰稳场 提交于 2020-03-01 11:56:20
http://blog.csdn.net/sinzou1/article/details/5903968 Linux(ubuntu)安装bochs http://wenku.baidu.com/view/f968e23b0912a21614792914.html ubuntu下安装bochs http://www.linuxidc.com/Linux/2011-07/38371.html Ubuntu 10.04安装Bochs 2.4.5笔记 http://blog.csdn.net/traceless/article/details/3200169 bochs的安装与使用 http://hi.baidu.com/_0x55aa/item/38e3ac01d72f0e1bcc34eae6 linux bochs的启动 本文介绍在SUSE Linux Enterprise Desktop系统下如何使用bochs调试内核linux-0.11版本 前言: linux-0.11虽然是早期内核代码,代码不超过2万行,但却基本是现今内核代码的精简版本,麻雀虽小,五脏俱全. 阅读理解完整代码,可以对整个系统的运作过程有深刻理解. 一. 准备工作(以root用户执行): 下载调试工具bochs: 在 http://sourceforge.net/projects/bochs/ 下载.tar

Python

拜拜、爱过 提交于 2020-03-01 01:52:52
文章目录 前言 明确学习目标,不急于求成,不好高骛远 在开始学习 Python 之前,你需要做一些准备 2.1 Python 的各种发行版 2.2 安装 Python 2.3 选择一款趁手的开发工具 习惯使用IDLE,这是学习python最好的方式 严格遵从编码规范 代码的运行、调试 模块管理 5.1 同时安装了py2/py3 5.2 使用Anaconda,或者通过IDE来安装模块 5.3 仅安装了py2 或 py3 5.4 pip应用演示 5.5 模块仓库 5.4 发布自己的模块安装包 前言 欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你们。 明确学习目标,不急于求成,不好高骛远 当下是一个喧嚣、浮躁的时代。我们总是被生活中大量涌现的热点所吸引,几乎没有深度阅读和思考的时间和机会。我始终认为,学习是需要沉下心来慢慢钻研的

基于虚拟机的软件保护技术

别说谁变了你拦得住时间么 提交于 2020-03-01 01:44:35
本文并不打算对vmprotect或其它某款软件安全套件进行深入讨论,而着眼于研究基于虚拟机的软件保护技术的起源、思想和实现。 现有软件保护技术概述 传统的软件保护技术,根据针对对象不同,可分为反静态调试和反动态调试两大类。反静态调试主要针对对象为反汇编器。反汇编器通过面向特定平台的反汇编引擎(如PC平台即为X86反汇编引擎),将编译器生成的二进制文件还原成汇编代码,有经验的逆向工程师可以据此还原出算法等核心运算机制。反静态调试主要是通过特定区段加密等方式,将核心信息保护起来,只在运行期才通过解密等算法动态还原,阻碍反汇编器静态地将二进制文件还原成汇编码。 反动态调试主要针对对象为调试器,由于经过静态加密的二进制码最终必须解密才能执行,因此通过Ollydbg等动态调试器仍然可以加以查看,反动态调试通过检测调试器和屏蔽调试端口等各种反调试技术阻止逆向工程师通过调试器跟踪软件进程的运行情况,使得软件的运行时状况始终保持处于黑盒状态。 被动型软件保护概念上述两种保护方案均采取主动出击的策略,意图“御敌于国之外”,中心思想是一个“挡字”,阻止逆向工程是窥视软件内部机理,但盾与矛的对抗总是无休止的,并没有任何一种主动型软件保护手段能真正彻底阻断逆向工程,因此另一种“以人为本”的被动型软件保护技术开始走向斗争舞台的中央。 被动型软件保护手段基于一个假设

iOS各种调试技巧豪华套餐(下)

柔情痞子 提交于 2020-02-29 20:36:26
进击的码农 如果说你已经把打印的艺术运用的风生水起了,并且断点的使用可以信手拈来随心所欲,那么你已经在与逼优鸡的对峙中,稳操大部分胜券了,你已经是一个孤高冷艳的程序员了,俯视一切低能的逼优鸡了!但是!面对更强大的敌人——你那秃顶1000°近视牙齿夹着韭菜的有着十年对战逼优鸡的同事面前、以及笑里藏刀眼睛有眼屎但是能用眼神杀死你的面试官…… 对于他们,你还是太弱,你的技能的磨练还太少!所以你必须要进击!!比逼优鸡还要强大的敌人出现了!我们需要更强大的武器。 Console(lldb 命令) 我们的目标是要武装到鼻毛!console窗口大家知道就是哪个黑乎乎好多字会滚出来,尤其是被逼优鸡干到的时候,那么同学们有没有遇到这种console呢 图16 我们家的编译器历史 敬请乱入 《IOS中的预编译指令的初步探究》 ,没错我们现在正在使用着世界上最好的c、c++、oc、swift的编译器——LLVM,lldb就是这个世界上最好的LLVM的调试器!不要害羞,因为我们是最优秀的!所以肯定要用最好的!千万别客气哟,随便用,就像自己家一样啊,啊 哈哈 吃吃吃 别只顾着吃饭,多夹菜……哎~博主好客的职业病又犯了~,什么?你不知道在哪里用lldb? 首先!你得先crash或者把程序断下来!直到你看到图16的(lldb)字样出现,你就可以敲命令了~~ 每次你想查看变量,常量,你要重新写NSLog去打印

如何使用repr调试python程序

六月ゝ 毕业季﹏ 提交于 2020-02-29 13:48:53
一般调试程序的时候都比较倾向print,利用直接打印的方法作出判断,但是print只能打印出结果,对类型无法作出判断。例如: 复制代码 a = 5 b = '5' print(a) print(b) 结果为: 5 5 复制代码 对于a和b从表面看是一样的,可能就会默认为a == b 实则a为int类型,b为string类型 再用repr看看结果: 复制代码 a = 5 b = '5' print(repr(a)) print(repr(b)) 结果为: 5 '5' 复制代码 对于动态的python对象来说,利用repr也是很方便的: 复制代码 class OpenClass(object): def __init__(self, x, y): self.x = x self.y = y obj = OpenClass(2,3) print(obj) # 结果为:<__main__.OpenClass object at 0x101cb7390> 复制代码 用repr重建对象: 复制代码 class OpenClass(object): def __init__(self, x, y): self.x = x self.y = y def __repr__(self): return 'OpenClass(%d,%d)'%(self.x, self.y) obj =

安卓逆向学习——动态调试

倖福魔咒の 提交于 2020-02-29 11:20:33
安装好AndroidStudio后设置JDK和SDK路径 安装Smali插件 选择你的Smalidea插件的位置 添加插件 接下来把要安装的apk安装到模拟器上运行该进程 打开AS,选择打开项目,直接导入AK反编译的apk文件路径即可。 复制上面的文件路径 打开AS导入对应路径项目 导入成功后选择Project 连接模拟器Shell查看进程 找到我们打开进程的PID 转发调试端口到8700 开始配置AS的调试设置 添加调试策略 选择字符串搜索,找到要下断点的Smali代码位置,我们这里以字符串定位 我们搜索onKey()函数,并在其中执行的位置下断点。 点击Debug按钮 开始测试调试,随意输入一些内容按回车,发现多出以下信息 右侧是自定义查看窗口,可以随意查看想要看的变量 F8键是单步步过,也可以按下面的按钮实现 F7单步步入 这种动态调试虽然没有jeb提示那么清晰,但是却更加稳定,可以修改this指针的值,除了this指针的值其他寄存器是不能修改的。 第二种调试方法 可以不用输入转发端口指令,只需要打开ddms,点击想要调试的进程 然后直接点击Debug按钮即可调试 如果出现以下错误提示是代表调试端口被占用了,需要重启一下连接服务 重启服务 重新选择要调试程序,发现有调试图标 再次点击调试,又一次进入调试状态 指定调试开始的入口点 有的时候我们不希望以附加方式进行调试

iOS 开发之LLDB调试命令初探

此生再无相见时 提交于 2020-02-29 09:09:09
如果你在平时的开发中从未使用过调试器,那你恐怕不知道一个调试器的作用有多大。你可能只满足于通过 printf 或者 NSLog 输出信息用于调试。但你只要试着尝试在调试中开始使用调试器 LLDB ,你会马上感受到调试器给你带来的便利。 LLDB 是 LLVM 下的调试器。Xcode从4.0开始编译器开始改用 LLVM ,相应的调试器也从 gdb 改为 LLDB 。而从 Xcode5.0开始所有工程也被自动设置为使用 LLDB 。下面本文从初学者的角度讲解在日常的开发中如何使用 LLDB 以及 LLDB 常用的命令。 初识 LLDB 你可能从未使用过 LLDB ,那让我们先来热热身。 在调试器中最常用到的命令是 p (用于输出基本类型)或者 po (用于输出 Objective-C 对象)。如下,你可以通过输入po 和 view 来输出 view 的信息: po [self view] 随后调试器会输出这个 object 的 description。在这个例子中可能是这样的信息: (UIView *) $1 = 0x0824c800 <UITableView: 0x824c800; frame = (0 20; 768 1004); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: