Linux gdb调试及后台程序问题】的更多相关文章

https://blog.csdn.net/lengchanguo/article/details/50481533 转? 问题是后台& 调试…
Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 11.10 eclipse 3.7(indego) for java jdk 6 android sdk 2.2 andrid ndk r7 当然,在windows环境下通过cygwin等工具也是可以实现gdb调试的,我也确实实现过.但是性能实在太低,卡的根本没法用.Linux下直接用gdb调试本地方法是很流畅的. 再确定安装并配置好开发环境之后,就可以开始了.…
一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 quit 2.调试过程 (1)list命令 list  linenum        显⽰binFile第linenum行周围的源代码,接着上次的位置往下列,每次列10⾏. list  function       显示函数名为function的函数的源程序 list                …
一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 quit 2.调试过程 (1)list命令 list  linenum        显⽰binFile第linenum行周围的源代码,接着上次的位置往下列,每次列10⾏. list  function       显示函数名为function的函数的源程序 list                …
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式. 当程序被停住时,可以检查此时程序中所发生的事,并追索上文. 动态地改变程序的执行环境. 不管是调试Linux内核空间的驱动还是调试用户空间的应用程序,掌握gdb的用法都是必须.而且,调试内核和调试应用程序时使用的gdb命令是完全相同的,下面以代码清单22.2的应用程…
一.调试的指令 1.list命令 list linenum 显示程序第linenum行的周围的程序 list function 显示程序名为function的函数的源程序 list 显示当前行后面的源程序 list - 显示当前行前面的源程序 2.run(r):运行命令 run args run命令可以直接接命令行参数值,也可以在执行run之前通过 set args + 参数值实现 3.break(b):打断点 b linenum   在某行打断点 b +offset/-offset  在当前行…
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式. 当程序被停住时,可以检查此时程序中所发生的事,并追索上文. 动态地改变程序的执行环境. 不管是调试Linux内核空间的驱动还是调试用户空间的应用程序,掌握gdb的用法都是必须.而且,调试内核和调试应用程序时使用的gdb命令是完全相同的,下面以代码清单22.2的应用程…
一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要 把调试信息加到可执行文件中.使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点.如: > cc -g hello.c -o hello > g++ -g hello.cpp -o hello 如果没有-g,你将看不见程序的函数名.变量名,所代替的全是 运行时的内存地址.当你用 -g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他. 启动 GDB的方法有以下几种…
没有使用过gdb调试过程序的觉得gdb是个很神奇的东东,如果你使用它调试一次保证你想忘记它都难,下面看看它的庐山真面目吧! GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓“寸有所长,尺有所短”就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定…
平时很多时候,我们需要通过脚本命令调用执行程序,集成一体后方便使用快捷.但是启动脚本窗口比较碍眼,能设置为后台运行既方便又美观. Linux启动后台程序 1.后台执行 nohup方法:不挂断的运行命令. 在执行命令语句前加上 nohup &方法:后台运行.在执行命令语句后加上 & 两种方法一般一起使用 例: nohup  command  & 2.查看进程:输入 ps -ef | grep ps:将某个进程显示出来 -A 显示所有程序.  -e 此参数的效果和指定"A&q…
一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要 把调试信息加到可执行文件中.使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点.如: > cc -g hello.c -o hello > g++ -g hello.cpp -o hello 如果没有-g,你将看不见程序的函数名.变量名,所代替的全是 运行时的内存地址.当你用 -g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他. 启动 GDB的方法有以下几种…
gdb的启动 --gdb 程序名 [corefile] --corefile是可选的,但能增强gdb的调试能力 --强调:启动gdb必须在编译命里加上"-g"参数,"-g"一般写在遍历命令的靠前位置,例如--gcc -Wall -g -o hello.o -c hello.c "-q"命令 --命令格式:gdb -q 执行程序 --不显示gdb版本信息 gdb命令集合 --直接运行调试命令 gdb 程序名 --"run" 开始…
在gdb中,运行程序使用r或是run命令. 程序的运行,你有可能需要设置下面四方面的事. 1.程序运行参数. set args 可指定运行时参数.(如:set args 10 20 30 40 50) show args 命令可以查看设置好的运行参数.…
exbot@ubuntu:~/CodeLearn/HelloWorld/src$ g++ -g main.cpp exbot@ubuntu:~/CodeLearn/HelloWorld/src$ ./a.out Hello world! exbot@ubuntu:~/CodeLearn/HelloWorld/src$ gdb a.out GNU gdb (Ubuntu/Linaro ) 7.4-2012.04 Copyright (C) Free Software Foundation, Inc…
开篇词:Linux C/C++ 开发人员要熟练掌握 GDB 调试 大家好,我是范蠡,目前在某知名互联网旅游公司基础框架业务部技术专家组任开发经理一职. 本系列课程的主题是 Linux 后台开发的 C/C++ 调试,通俗地说就是 GDB 调试.GDB(GNU Debugger)是类 Unix(如 Linux)操作系统下的一款开源的 C/C++ 程序调试器.最初是在 1988 年由理查德 · 马修 · 斯托曼(Richard Stallman)所撰写,之后以 GNU 通用公共许可证(GNU Gene…
1.调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer.在应用程序调试的时候,pc机上的gdb向开发板上的GDBServer发出命令,而开发板上的gdbserver就会向应用程序发出信号,使应用程序停下来或者完成其他一些工作. 2.安装GDB和GDBServer(gdb-7.4.tar.bz2 ) 2.1.GDB 1.下载: http://ftp.gnu.org/gnu/gdb/  2.解压:tar xvf…
原文: http://blog.csdn.net/feixiaoxing/article/details/7199643 用gdb调试多进程的程序会遇到困难,gdb只能跟踪一个进程(默认是跟踪父进程),而不能同时跟踪多个进程,但可以设置gdb在fork之后跟踪父进程还是子进程.以上面的程序为 #include <stdlib.h> #include <unistd.h> #include <stdio.h> #define MAXLINE 80 int main(voi…
GDB概述 GDB是GNU开源组织公布的一个强大的UNIX下的程序调试工具.也许,各位比較喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但假设你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓"寸有所长.尺有所短"就是这个道理. 一般来说,GDB主要帮忙你完毕以下四个方面的功能: 启动你的程序.能够依照你的自己定义的要求随心所欲的执行程序. 可让被调试的程序在你所指定的调置的断点处停住.(断点能够是条件表达式) 当程序被停住时…
番外 2019年7月26日至27日,公司邀请<软件调试>和<格蠹汇编——软件调试案例集锦>两本书的作者张银奎老师进行<Linux高级调试与优化>培训,有幸聆听张老师的课程.若干年前有幸拜读过<软件调试>一书,受益匪浅. 张老师给人的感觉温文尔雅,谦谦如玉,对Windows和Linux内核的内存分配和任务管理机制有非常深入的了解,对Intel CPU的内部实现机制也有很深的功底,如数据/代码缓存.数据/代码TLB缓存.乱序执行.MMU机制等. 整个培训的内容包…
注:本文重要信息使用 *** 屏蔽关键字. 最近国庆前,项目碰到一个很麻烦的问题,这个问题让我们加班到凌晨三点. 大概背景: 客户给了一些 C语言 写的 SDK 库,这些库打包成 .so 文件,然后我们使用 C# 调用这些库,其中有一个函数是回调函数,参数是结构体,结构体的成员是函数,将 C# 的函数赋值给委托,然后存储到这个委托中. C# 调用 C 语言的函数,然后 C 语言执行到一些步骤后, C 语言函数调用 C# 的函数.这个在 ARM64 的机器下,是正常的,例如树莓派,华为的鲲鹏服务器…
本节我们研究嵌入式Linux的调试技术,对于复杂的Linux驱动及HAL等程序库,需要使用各种方法对其进行调试.刚开始讲了打印内核调试信息:printk,这个函数的用法与printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间.执行完相关的命令后,会要求选择在Ubuntu Linux上,还是在Android设备上运行.接下来讲了防止printk函数降低Linux驱动性能,它的目的只要是实现控制printk函数的输出.通过虚拟文件系统进行数据交互,在Linux文件…
对调试工具进行简介.Linux中提供了一类工具,通过这些工具可以逐行跟踪程序的代码,用于测试用户空间程序的gdb.gdbserver和调试内核空间程序的kgdb. 用gdb调试用户空间程序:gdb可跟踪调试用户空间的程序,这些调试命令可用于gdbserver远程调试.可直接运行脚本文件编译gdb_debug.c,但要加上命令行参数-g.使用命令“# gdb gdb_debug”调试gdb_debug.最简单的命令:quit,用于退出gdb调试界面.常用的调试命令,如下:①list:用于列出程序中…
gdb thread apply all bt 如果你发现有那么几个栈停在 pthread_wait 或者类似调用上,大致就可以得出结论:就是它们几个儿女情长,耽误了整个进程. 注意gdb的版本要高于7.0,之前使用过gdb6.3调试多线程是不行的. 从上图可以看出两个线程都阻塞在wait上,而且还给出了在哪一行代码中,很容易就定位到产生死锁的位置. 有时候线程太多,想写到文件里,可以: (gdb)set logging file <文件名> (gdb)set logging on (gdb)…
简介 GDB(GNU debugger)是GNU开源组织发布的一个强大的UNIX下的程序调试工具.可以使用它通过命令行的方式调试程序.它使你能在程序运行时观察程序的内部结构和内存的使用情况.你也可以使用它分析程序崩溃前的发生了什么,从而找出程序崩溃的原因.相对于windows下的图形界面的VC等调试工具,它提供了更强大的功能.如果想在Windows下使用gdb,需要安装MinGW或者CygWin,并且需要配置环境变量才可以使用. 一般来说,gdb完成以下四个方面的工作: 1.启动你的程序,修改一…
1. 启动GDB开始调试: (1)gdb program ///最常用的用gdb启动程序,开始调试的方式(2)gdb program core ///用gdb查看core dump文件,跟踪程序core的原因(3)gdb program pid ///用gdb调试已经开始运行的程序,指定pid即可 2. 应用程序带命令行参数的情况,可以通过下面两种方法启动: (1)启动GDB的时候,加上–args选项,然后把应用程序和其命令行参数带在后面,具体格式为:gdb –args program args…
在编程调试中,经常出现段错误,此时可用gdb调试.具体方法为注册段错误信号处理函数,在处理函数中启动gdb.具体代码如下: void segv_handler(int no) { ]; ]; FILE *file; snprintf(buf, sizeof(buf), "/proc/%d/cmdline", getpid()); if(!(file = fopen(buf, "r"))) { exit(EXIT_FAILURE); } if(!fgets(buf,…
addr2line有什么作用呢? 可别小瞧它, 它能够定位到代码出错的位置. 以下, 我们来看看这个简单的代码: #include <stdio.h> int main() { int *p = NULL; *p = 0; printf("bad\n"); return 0; } 这个程序非常小, 我们能够一眼就看出程序在执行期出错. 可是, 假设是大程序, 在执行期出错. 我们该怎样定位呢?  那就必须依赖于工具. 而不是你我的肉眼. 我们以上述小程序为例, 进行例如以下…
函数,数组,指针,gdb调试器 1.函数定义 如果明确指定返回类型,默认为int 参数传递:实参对形参的参数传递是单向的,实参只是把自己的值赋给形参.                      形参的值在函数里的改变不会影响实参.                                       函数返回类型与return 不一致,return 会自动转换成返回类型. 函数可以返回一个指针不能返回一个数组.                                函数体如果写在m…
Linux 下的一个进程打开一个日志文件,不定期地往该文件里写入日志.此时可以在控制台使用 mv 命令给该日志文件改个名字或者用 rm 命令把这个日志文件删除掉.Linux 下是允许这么干的!对于改日志文件名的情形还好一点,后续的日志还是会写入更名后的文件里,只是会影响后面日志文件自动清理功能(比如把日志文件名改得像个进程文件名):而对于删除文件的情形,就直接导致后续的日志无法计入日志文件,一直到第二天凌晨日志文件切换时才回复正常. 为此,增加了一个日志文件保护功能,放在一个独立的线程 logG…
GDB是一套字符界面的程序集,可以用它在linux上调试C和C++程序,它提供了以下的功能: 1 在程序中设置断点,当程序运行到断点处暂停 2 显示变量的值,可以打印或者监视某个变量,将某个变量的值显示出来 3 单步执行 4 运行时修改变量的值 5 跟踪路径 6 线程切换 等等 下面以以下程序为例 当我们要使用GDB进行程序的调试时,在用GCC编译时需要加上-g,如下: GDB之所以能够进行程序的调试也是在于进行编译时的-g选项,当设置了这个选项的时候,GCC会向程序中塞入一下信息,作为GDB调…