Linux开发环境介绍 简介(二) GDB & Memory Leakage Detection Tools

Slides:



Advertisements
Similar presentations
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
Advertisements

LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
國立臺灣大學 103 學年度轉學生招生監試說明會 教務處課務組 胡淑君.
Oracle数据库 Oracle 子程序.
在PHP和MYSQL中实现完美的中文显示
J2EE与中间件技术 ——Lab.
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Android开发入门 -----Android 开发“Ready go!” 主讲:李晓蕾
編譯環境介紹.
Linux环境高级编程实验.
第二讲 搭建Java Web开发环境 主讲人:孙娜
学习前的准备工作 讲师:burning.
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
曙光集群简明使用手册 技术支持中心.
SVN服务器的搭建(Windows) 柳峰
实践演练 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
走进编程 程序的顺序结构(二).
DM81X 视频采集处理 ——简单采集显示例程讲解 广州创龙电子科技有限公司
PostgreSQL 8.3 安装要点 四川大学计算机学院 段 磊
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
AC500 调试总结 以太网通讯配置 lizhenfei.
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
第四章 附件 (应用程序软件包).
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
YMSM D-PACK 安装手册 作成者:D-PACK维护组(YMSLx) 作成日:
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
Gzip编译及调试 曹益华
Visual Studio 2010简捷入门.
录制回放工具使用说明 鲁晓宇
檔案類型介紹 Linux 的檔案類型 目錄: 用ls –F時檔名後面有/,螢幕列出目錄時為藍色 可執行檔: 壓縮檔: 連結檔:
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第二章 登录UNIX操作系统.
专题作业.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
Confidential Property
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
第四章 团队音乐会序幕: 团队协作平台的快速创建
第1章 c++概述 1.1 C++语言的简史及特点 1.2 简单的C++程序 1.3 C++语言的基本组成
Drupal Dev 我想知道:什么时候、什么变化.
Windows 程式設計 (使用 C++ / C#)
VB与Access数据库的连接.
姚金宇 MIT SCHEME 使用说明 姚金宇
杨振伟 清华大学 第一讲:Linux环境下编程(1)
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
Lab17 程序设计B班
项目二:HTML语言基础.
Web安全基础教程
iSIGHT 基本培训 使用 Excel的栅栏问题
实验一:编译运行Linux内核并使用gdb进行调试
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
调试技巧.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
如何連上工作站 WorkStations: 1. Solaris 2. Linux Use X-Win32 (for Solaris)
Python 环境搭建 基于Anaconda和VSCode.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
杨振伟 清华大学 第一讲:Linux环境下编程(1)
嵌入式Linux编程环境.
WEB程序设计技术 数据库操作.
本节内容 如何调试驱动程序? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
实验六、COM类型病毒分析实验 实验开发教师: 刘乃琦 谌黔燕.
Presentation transcript:

Linux开发环境介绍 简介(二) GDB & Memory Leakage Detection Tools Delivered By LiHao @founder(Shanghai) Introduction to Linux Dev Env. (Ser. 2) Debugging&Optimization.

目的: GDB --- 概述(Overview) 问题:当程序完成编译,链接并生成可执行的目标文件后,如果出现结果与预期的不同时,怎么办? 解决方法: GDB GDB作用: 免费的Unix/Linux平台下的调试工具。

GDB --- 使用(Usage) 下面就开始我们的GDB之旅 前置条件 启动/退出GDB 调试程序 在我们对我们程序调试之前,要保证我们的程序含有debug信息,即保证g++/gcc使用-g 参数对源码进行编译。 启动/退出GDB 在unix/linux的 prompt模式下 输入:gdb 进入调试状态。 在gdb状态下,输入quit,或者 ctrl+d , 退出调试状态。 调试程序 gdb executable 对 executable进行调试。 gdb executable core 对 executable进行调试,并使用core dump信息。

GDB --- 使用(Usage) 问题:如果我们的程序需要我们在执行的时候提供相应的输入参数时,怎么对其进行调试? 解决方法: gdb executable pid 对当前进程ID为 pid的executable程序进行调试。 问题:如果我们的程序需要我们在执行的时候提供相应的输入参数时,怎么对其进行调试? 解决方法: 启动gdb时对其设置。 gdb executable agrs1 args2… argsN 在gdb状态下使用set args命名对其参数进行设置。 set args args1 args2 … argsN show args 查看所设置的参数情况。 show args

GDB --- 使用(Usage)之常用参数介绍 -symbols file , -s file ,从所指定的文件file文件中读取符号表。 -exec file –e file, 指定可执行文件。 -core file –c file 指定core dump 文件。 使用ulimit –c unlimited 来打开core dump文件,默认系统不产生core dump文件 -pid num –p num 链接到进程号为num的进程上,同attach命令。 -directory dir –d dir 指定gdb所搜寻的目录。

GDB --- 使用(Usage)之常用参数介绍 gdb日志系统,用来保存gdb命令执行时候的输出,可以将其重定向到一个文件系统中。 set logging on 打开日志系统 set logging off 关闭日志系统 set logging file filename 将日志重定向到filename中。 show logging 显示当前日志参数的当前状态。 set logging overwirte [on|off] set logging redirect [on|off] Tips: 在gdb使用的过程中可以使用tab/M-?键来对命令进行补齐。

GDB --- 使用(Usage)之常用参数介绍 run/ r 运行所调试的程序。 设置/查看当前所运行的环境情况。 path directory 将路径directory添加到环境变量PATH中。 show paths 查看环境变量PATH的值。 设置/取消设置/查看环境变量 set environment|env varname[=value] 设置环境变量的值。 show env 查看环境变量的值 unset env varname 取消对环境变量varname的设置。 附加/断开到一进程 attach pid detach

GDB --- 使用(Usage)之常用参数介绍 设置断点(break/b) b (break) filename:lineNum 在filename的第lineNum行上设置断点 b (break) 在下一条指令上设置断点 b (break) filename:function_name 在filename的中function_name函数上设置。 b (break) linenum thread threadNum 在指定的线程上设置断点 b (break) linenum thread threadNum if … 在指定线程的特点条件上 设置/查看当前的堆栈信息/调用信息(frame/f) frame args 设置跳转到的堆栈编号,如果args为空,则查看当前的堆栈信息 frame n 堆栈信息的查看 f n up/down n Info f

GDB --- 使用(Usage)之常用参数介绍 backtrace (bt) 显示所有的调用堆栈信息。 bt (+/-)n 显示最近/最早的n 层调用信息。 bt full 显示最近所有的调用信息并打印出局部变 量的情况 where, info stack, info s 与上述的bt命令具有相同的功能。 查看源码 (list/l) list linenum 查看 linenum附近的源代码。 list function 查看function附近的源代码。 list 查看源码。 list first,last 看看(first , last)内源码。

GDB --- 使用(Usage)之常用参数介绍 查看变量 (print/p) print expr/var 输出当前表达式或变量的值。 p file::var 输出变量的值。 p function::var

Valgrind 内存泄露检测(Unix/Linux) 问题:当编译,链接,运行均正确后,是否意味着我们的程序是一个合格的程序? 答案:不竟然,衡量一个程序的好坏有很多的指标,其中一个是内存管理的情况。 Valgrind 就是一个检测我们对于内存管理情况的工具。 什么是内存泄露? 就是我们向系统申请内存后,没有正确的释放我们所获取的内存,从而导致系统内存越来越少,最后,出现无法申请到有效的内存。 一般的内存管理方式 malloc /free new/delete 当这两对函数不成对出现时,意味着我们的程序出现了内存泄露

Valgrind 内存泄露检测(Unix/Linux) 如何获得? Google 如何安装? Google Read manual (一般步骤是:解压 tar-xvf xxx.tar, 运行configure, make, make install)

Valgrind 内存泄露检测(Unix/Linux) valgrind [valgrind-options] your-prog [your-prog-options] 如需要检测内存泄露加上参数 --leak-check=yes Valgrind 参数两类 core 的参数,它对所有的工具都适用; 具体某个工具如 memcheck 的参数。 Valgrind 默认的工具就是 memcheck,也可以通过“--tool=tool name”指定其他的工具 更多的见手册

Valgrind 内存泄露检测(Unix/Linux) Comes from :http://www.ibm.com/developerworks/cn/linux/l-cn-valgrind/

Valgrind 内存泄露检测(Unix/Linux) 使用未初始化内存 例如:a[5],定义但未对其进行初始化,就使用。 内存读写越界 例如:char* pt=malloc (5) , 此时使用*(pt+6). 内存覆盖 例如:strcpy, strncpy, memcpy, strcat源地址,目的地址有重复。 动态内存管理错误 Malloc/free, new/delete 不配对。

Q&A