linux调试
sunxiaopengsun
这个作者很懒,什么都没留下…
展开
-
GDB调试命令详解
基础用法1. 简介GDB(GNU Debugger)是GCC的调试工具。其功能强大,现描述如下: GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2.可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 3.当程序被停住时,可以检查此时你的程序中所发生的事。 4.动态的改变你程序的执行环原创 2017-03-01 12:08:59 · 1117 阅读 · 0 评论 -
gdb调试多线程
gdb使用gdb与多线程gdb使用gdb是非常强大的调试工具,在文本模式下使用。使用方法可以参考陈皓的两篇文章 用GDB调试程序(一) 用GDB调试程序(二)gdb常用命令在下表列出:命令描述backtrace(或bt)查看各级函数调用及参数finish连续运行到当前原创 2017-02-16 09:56:14 · 604 阅读 · 0 评论 -
使用GDB生成coredump文件
如果在测试过程中遇到某个进程的CPU利用率过高或者卡死而需要去调试该进程时,可以利用gdb命令生成coredump文件,然后再去调试coredump文件来定位问题。那么如何使用gdb生成coredump文件呢?其实步骤很简单:1. 安装好gdb,然后使用命令 'gdb'。(假设需要调试的进程号为 21509)2. 使用 ‘attach 21590’命令将gdb附加到进程2150原创 2017-06-10 09:11:44 · 1779 阅读 · 0 评论 -
gdb调试coredump(使用篇)
什么是coredump Coredump叫做核心转储,它是进程运行时在突然崩溃的那一刻的一个内存快照。操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存、寄存器状态、运行堆栈等信息转储保存在一个文件里。 该文件也是二进制文件,可以使用gdb、elfdump、objdump或者windows下的windebug、solaris下的mdb进行打开分析里面的具体内原创 2017-06-10 09:35:07 · 44366 阅读 · 1 评论 -
GDB 调试 C++ 程序 core dump
摘要gdb 的一些常用命令, 及在程序发生段错误后如何通过调试 core dump 迅速定位到出错位置.不罗列一大堆命令了, 只是把碰到的/用过的整理一下, 以后再使用到新的命令, 再补充. 有几篇总结的比较好的文章可以参考: 《LINUX C/C++ GDB调试(概述)上》、《LINUX C/C++ GDB调试(概述)下》、《手把手教你玩转GDB(二)——Breakpoint,原创 2017-06-10 09:17:00 · 527 阅读 · 0 评论 -
GDB 找不到源代码
首先直接列出问题及其解决方法:设置a.cpp:1234这样的断点后(断点位于.so文件中),gdb知道停在哪个函数,并能够停下来,但是无法显示源文件名及行号,也无法看到源码。明显是gdb有问题或者是调试信息有问题,我试遍了-g , -gstabs , -ggdb , -gstabs+参数,最终,-gstabs+参数可以和我的gdb完美配合,输出了我想要的东西,能够在debug的时候正确的看到函数名...原创 2018-03-05 14:19:12 · 6116 阅读 · 0 评论 -
使用GDB的堆栈跟踪功能
在调试程序的过程中,查看程序的函数调用堆栈是一项最基本的任务,几乎所有的图形调试器都支持这项特性。 GDB调试器当然也支持这一特性,但是功能更加灵活和丰富。 GDB将当前函数的栈帧编号为0,为外层函数的栈帧依次加1,这些编号将成为一些GDB命令的参数,以指明将要操作的是哪一个函数的栈帧。 GDB还支持使用Address作为栈帧的标识符,可在栈帧编号被破坏的情况...原创 2018-05-17 10:29:03 · 2106 阅读 · 1 评论 -
程序由多个原文件组成,gdb时如何在指定的某个文件中设置断点?
比如源文件有:file1.c file2.c main.c(包含file1.c file2.c )如果想在在file1.c中设置一个断点,如何做呢?早几天遇到了这个问题,现在把它总结一下: 如果我们想在file1.c中的第40行设置断点,我们可以这样gdb file1.c: 40 //注意file1.c后面的分号...原创 2018-05-08 17:44:21 · 7549 阅读 · 0 评论 -
gdb加了-g仍然(no debugging symbols found)
想用gdb对程序进行调试,之前的时候就想用gdb的,结果发现加了-g也还是不行,显示如下:GNU gdb 6.8Copyright (C) 2008 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free...原创 2018-05-15 16:18:14 · 2680 阅读 · 0 评论 -
linux下生成core dump文件方法及设置 bug定位
core dump的概念:A core dump is the recorded state of the working memory of a computer program at a specific time, generally when the program has terminated abnormally (crashed). In practice, other key ...转载 2018-09-26 10:46:35 · 633 阅读 · 0 评论 -
C/C++内存问题检查利器—Purify (五)
十、 设置WatchPoint你可以在你的程序中,对你所想监控的程序设置一些WatchPoint,以方便于你对程序进行调试,或更容易找出问题的原因。就像我前面说,Purify可以找到你的内存泄露,但其不能找到内存泄露的原因,你可以通过设置WatchPoint来跟踪一块内存,以找到在程序执行过程中该内存的访问情况。 Purify的WatchPoint可以产生下例消原创 2017-02-13 18:40:49 · 4813 阅读 · 0 评论 -
C/C++内存问题检查利器—Purify (四)
七、 Purify的退出码像UNIX下的软件,一般都会提供和别的应用程序的接口,像上面的生成文本文件,也是给别的应用程序提供接口的一种方式。这里,我们所要讲述的是Purify的退出码,我们知道程序都有退出码,以提供给别的程序或操作系统自己运行的信息。被Purify编译过的程序,你可以通过指定-exit-status参数来告诉Purify是否用Purify的退出码,如果这原创 2017-02-13 18:39:38 · 438 阅读 · 0 评论 -
C/C++内存问题检查利器—Purify (三)
五、 文件描述符问题在上面的内存问题表中,对于大多数的内存问题来说,相信对于熟悉C/C++的程序员,并不陌生。有一些关于Watchpoint和文件描述符的内容,可能会让你看得比较模糊,对于Watchpoint,我会在后面讲述。这一节,我就一个示例说一说文件描述述问题是如何产生的,并由此介绍一下Purify的一些特性。 先查看下面这段程序:原创 2017-02-13 18:37:15 · 433 阅读 · 0 评论 -
用GDB调试程序(一)
用GDB调试程序GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能:原创 2017-02-13 18:14:54 · 282 阅读 · 0 评论 -
用GDB调试程序(二)
GDB的命令概貌———————启动gdb后,就你被带入gdb的调试环境中,就可以使用gdb的命令开始调试程序了,gdb的命令可以使用help命令来查看,如下所示: /home/hchen> gdb GNU gdb 5.1.1 Copyright 2002 Free Software Foundation, Inc. GDB is free s原创 2017-02-13 18:15:57 · 213 阅读 · 0 评论 -
用GDB调试程序(三)
四、维护停止点上面说了如何设置程序的停止点,GDB中的停止点也就是上述的三类。在GDB中,如果你觉得已定义好的停止点没有用了,你可以使用delete、clear、disable、enable这几个命令来进行维护。 clear 清除所有的已定义的停止点。 clear clear 清除所有设置在函数上的停止点。原创 2017-02-13 18:17:26 · 251 阅读 · 0 评论 -
用GDB调试程序(四)
查看栈信息—————当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息。下面是一些查看函数调用栈信息的GDB命令: backtrace bt 打印当前的函数调用栈的所有信息。如:原创 2017-02-13 18:18:46 · 243 阅读 · 0 评论 -
用GDB调试程序(五)
查看运行时数据——————— 在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据。print命令的格式是: print print / 是表达式,是你所调试的程序的语言的表达式(GDB可以调试多种编程语言),是输出的格式,比如,如果要把表达式按1原创 2017-02-13 18:19:51 · 271 阅读 · 0 评论 -
用GDB调试程序(六)
七、设置显示选项 GDB中关于显示的选项比较多,这里我只例举大多数常用的选项。 set print address set print address on 打开地址输出,当程序显示函数信息时,GDB会显出函数的参数地址。系统默认为打开的,如: (gdb) f #0 set_quo原创 2017-02-13 18:20:34 · 285 阅读 · 0 评论 -
用GDB调试程序(七)
改变程序的执行——————— 一旦使用GDB挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你的程序,比如,你可以在程序的一次运行中走遍程序的所有分支。 一、修改变量值 修改被调试程序运行时的变量值,在GDB中很容易实现,使用GDB的pr原创 2017-02-13 18:22:08 · 266 阅读 · 0 评论 -
C/C++内存问题检查利器—Purify (一)
C/C++内存问题检查利器——Purify 陈皓一、 引言 我们都知道软件的测试(在以产品为主的软件公司中叫做QA—Quality Assessment)占了整个软件工程的30% -50%,但有这么一种说法,即使是最优秀测试专家设计出来的测试案例,也无法彻底地检测到内存上的问题。 使用C/C++开发的团队一定有被其内存问题折磨过的经历,内存原创 2017-02-13 18:26:01 · 372 阅读 · 0 评论 -
C/C++内存问题检查利器—Purify (二)
三、 示例假设我们现在有这样一段程序:hello.c#include #include static char *helloWorld = "Hello, World"; main(){ char *mystr = malloc(strlen(helloWorld)); strncpy(mystr,原创 2017-02-13 18:27:14 · 362 阅读 · 0 评论 -
解决linux下不生成core dump文件
在linux平台下,设置core dump文件生成的方法:1) 在终端中输入ulimit -c 如果结果为0,说明当程序崩溃时,系统并不能生成core dump。2) 使用ulimit -c unlimited命令,开启core dump功能,并且不限制生成core dump文件的大小。如果需要限制,加数字限制即可。ulimit - c 10243) 默认情况下,co...原创 2019-04-14 18:36:24 · 7010 阅读 · 3 评论