Linux下C程序的GDB调试方法
- 格式:doc
- 大小:96.00 KB
- 文档页数:32
2.4 实例—使用gdb调试器1.编写实例程序gcctest.c,见2.2小节的开头部分2.编译3.启动GDB,执行程序启动gdb,进入gdb调试环境,可以使用gdb的命令对程序进行调试。
[root@localhost gdbtest txt]# gdb //启动gdbGNU gdb Fedora (6.8-27.el5)Copyright (C) 2008 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later </licenses/gpl.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law. Type "show copying"and "show warranty" for details.This GDB was configured as "i386-redhat-linux-gnu".(gdb) run gcctest //在gdb中,运行程序使用r或是run命令,注意,gcctest没有调试信息Starting program: gcctestNo executable file specified.Use the "file" or "exec-file" command. //要使用file或exec-file命令指出要运行的程序(gdb) file gcctest //使用file命令指出要运行的程序gcctest,注意,对gdb命令也可以使用Tab gcctest gcctest.c gcctestg(gdb) file gcctest //使用file命令指出要运行的程序gcctestReading symbols from /root/Desktop/gdbtest txt/gcctest...(no debugging symbols found)...done.(gdb) r //在gdb中,运行程序使用r或是run命令Starting program: /root/Desktop/gdbtest txt/gcctest gcctest(no debugging symbols found)(no debugging symbols found)(no debugging symbols found)hello in mainhello 1hello 2sum=54125560035401396161080590579269632.000000Program exited with code 057.(gdb) file gcctestg //使用file命令指出要运行的程序gcctestgReading symbols from /root/Desktop/gdbtest txt/gcctestg...done.(gdb) r //在gdb中,运行程序使用r或是run命令Starting program: /root/Desktop/gdbtest txt/gcctestg gcctesthello in mainhello 1hello 2sum=54125560035401396161080590579269632.000000Program exited with code 057.(gdb) q //使用q或是quit命令退出gdb[root@localhost gdbtest txt]#4.GDB命令简介support -- Support facilitiestracepoints -- Tracing of program execution without stopping the programuser-defined -- User-defined commandsType "help" followed by a class name for a list of commands in that class.Type "help all" for the list of all commands.Type "help" followed by command name for full documentation.Type "apropos word" to search for commands related to "word".Command name abbreviations are allowed if unambiguous.(gdb) help files //使用help <class>命令查看files类中的命令Specifying and examining files.List of commands:add-shared-symbol-files -- Load the symbols from shared objects in the dynamic linker's link mapadd-symbol-file -- Load symbols from FILEadd-symbol-file-from-memory -- Load the symbols out of memory from a dynamically loaded object filecd -- Set working directory to DIR for debugger and program being debuggedcore-file -- Use FILE as core dump for examining memory and registersdirectory -- Add directory DIR to beginning of search path for source filesedit -- Edit specified file or functionexec-file -- Use FILE as program for getting contents of pure memoryfile -- Use FILE as program to be debuggedforward-search -- Search for regular expression (see regex(3)) from last line listedgenerate-core-file -- Save a core file with the current state of the debugged processlist -- List specified function or lineload -- Dynamically load FILE into the running programnosharedlibrary -- Unload all shared object library symbolspath -- Add directory DIR(s) to beginning of search path for object filespwd -- Print working directoryremote -- Manipulate files on the remote systemremote delete -- Delete a remote fileremote get -- Copy a remote file to the local systemremote put -- Copy a local file to the remote system---Type <return> to continue, or q <return> to quit--- //一屏显示不完,敲回车键显示后面的内容reverse-search -- Search backward for regular expression (see regex(3)) from last line listedsearch -- Search for regular expression (see regex(3)) from last line listedsection -- Change the base address of section SECTION of the exec file to ADDRsharedlibrary -- Load shared object library symbols for files matching REGEXPsymbol-file -- Load symbol table from executable file FILEType "help" followed by command name for full documentation.Type "apropos word" to search for commands related to "word".Command name abbreviations are allowed if unambiguous.(gdb)5.显示源代码(gdb) file gcctestg //使用file命令指出要运行的程序gcctestgLoad new symbol table from "/root/Desktop/gdbtest txt/gcctestg"? (y or n) yReading symbols from /root/Desktop/gdbtest txt/gcctestg...done.(gdb) list //显示当前行后面的源程序1 #include <stdio.h>23 void print_hello1(char *p_str);4 void print_hello2(char *p_str);56 int main(int argc,char **argv)7 {8 double i,sum=0;9 char *pstr="hello in main";10 int arr[]={1,2,3,4,5};(gdb) list //显示当前行后面的源程序11 printf("%s\n",pstr);12 print_hello1("hello 1");13 print_hello2("hello 2");1415 for(i=1; i<=1020000020.01*1020000020.01*10100020.01*10100020.00202; i=i*1.0000016)16 sum=sum/1.0201809902203*1.000102101203*1.00006605+i*10.01016/1.0005;17 printf("sum=%f\n",sum);18 }1920 void print_hello1(char *p_str)(gdb) //敲回车键,继续执行list命令,显示当前行后面的源程序21 {22 printf("%s\n",p_str);23 }2425 void print_hello2(char *p_str)26 {27 printf("%s\n",p_str);28 }(gdb) list 8 //显示程序第8行的周围的源程序3 void print_hello1(char *p_str);4 void print_hello2(char *p_str);56 int main(int argc,char **argv)7 {8 double i,sum=0;9 char *pstr="hello in main";10 int arr[]={1,2,3,4,5};11 printf("%s\n",pstr);12 print_hello1("hello 1");(gdb) list 6,10 //显示程序第6-10行的源程序6 int main(int argc,char **argv)7 {8 double i,sum=0;9 char *pstr="hello in main";10 int arr[]={1,2,3,4,5};(gdb)gdb可以显示调试程序(编译程序时一定要加上-g参数,把源程序信息编译到执行文件中)的源代码。
gdb调试汇编语言
GDB是一个功能强大的调试器,可以用来调试汇编语言程序。
在使用GDB调试汇编语言程序时,你需要首先确保程序已经被编译成可执行文件,并且包含了调试信息。
接下来,你可以通过以下步骤使用GDB来调试汇编语言程序:
1. 启动GDB,在命令行中输入`gdb`命令,然后在GDB提示符下输入可执行文件的名称。
2. 设置断点,你可以使用`break`命令在程序中设置断点,以便在特定的位置停止程序的执行。
例如,你可以输入`break main`来在程序的主函数处设置断点。
3. 运行程序,输入`run`命令来运行程序,程序会在设置的断点处停止执行。
4. 单步执行,使用`stepi`命令来逐条执行汇编指令,这样你可以逐步跟踪程序的执行过程。
5. 查看寄存器和内存,使用`info registers`命令可以查看寄
存器的值,而使用`x`命令可以查看内存中特定地址的内容。
6. 检查堆栈,使用`backtrace`命令可以查看当前的函数调用堆栈,而使用`frame`命令可以切换到不同的堆栈帧。
7. 观察变量,使用`print`命令可以查看特定变量的值,这对于检查程序状态非常有用。
8. 继续执行,当你想让程序继续执行时,可以使用`continue`命令来让程序一直执行到下一个断点或者程序结束。
以上是使用GDB调试汇编语言程序的基本步骤,当然,在实际调试过程中可能会有更复杂的情况需要处理,但是掌握了这些基本操作之后,你就可以更有效地使用GDB来调试汇编语言程序了。
希望这些信息对你有所帮助。
GDB常用命令在linux的c编程中大家经常用gdb调试程序,以下是一些常用的指令1.break FUNCTION在某个函数上设置断点。
函数重载时,有可能同时在几个重载的函数上设置了断点break +OFFSETbreak -OFFSET在当前程序运行到的前几行或后几行设置断点break LINENUM在行号为LINENUM的行上设置断点break FILENAME:LINENUM在文件名为FILENAME的原文件的第LINENUM行设置断点break FILENAME:FUNCTION在文件名为FILENAME的FUNCTION函数上设置断点当你的多个文件中可能含有相同的函数名时必须给出文件名。
break *ADDRESS在地址ADDRESS上设置断点,这个命令允许你在没有调试信息的程序中设置断点break当break命令不包含任何参数时,break命令在当前执行到的程序运行栈中的下一条指令上设置一个断点。
除了栈底以外,这个命令使程序在一旦从当前函数返回时停止。
相似的命令是finish,但finish并不设置断点。
这一点在循环语句中很有用。
gdb在恢复执行时,至少执行一条指令。
break ... if COND这个命令设置一个条件断点,条件由COND指定;在gdb每次执行到此断点时COND都被计算当COND的值为非零时,程序在断点处停止ignore BNUM COUNT设置第BNUM号断点的被忽略的次数为COUNT,即断点BNUM 再执行到第COUNT+1次时程序停止tbreak ARGS 或者简写为 tb设置断点为只有效一次。
ARGS的使用同break中的参量的使用hbreak ARGS设置一个由硬件支持的断点。
这个命令的主要目的是用于对EPROM/ROM程序的调试因为这条命令可以在不改变代码的情况下设置断点。
这可以同SPARCLite DSU一起使用。
当程序访问某些变量和代码时,DSU将设置“陷井”。
gdb 调试函数
要调试一个函数,你需要以下步骤:1. 使用`gdb` 命令行工具启动你的程序:`gdb <executable>`,其中`<executable>` 是你要调试的可执行文件。
2. 设置断点:使用`break` 命令在你要调试的函数的位置设置断点。
例如,如果你要调试的函数是`my_function()`,可以使用`break my_function` 来设置断点。
3. 启动程序:使用`run` 命令启动程序,然后程序将在断点处停止执行。
4. 执行程序:使用`next` 命令按行执行代码,或使用`step` 命令进入函数内部执行。
5. 在调试过程中查看变量的值:使用`print` 命令来查看变量的值。
例如,可以使用`print variable_name` 来查看变量`variable_name` 的值。
6. 继续执行程序:使用`continue` 命令继续执行程序,直到下一个断点或程序结束。
7. 在调试结束后退出`gdb`:使用`quit` 命令退出`gdb`。
这些是基本的
`gdb` 调试函数的使用方法。
你还可以使用其他命令来查看堆栈信息、设置条件断点、跳到指定行等。
可以使用`help` 命令来获取更多有关`gdb` 命令的信息。
gdb 使用方法一、基本用法1. 启动gdb可以通过在命令行中输入"gdb"命令来启动gdb,并指定要调试的可执行文件作为参数。
例如,要调试名为"program"的可执行文件,可以输入以下命令:```gdb program```2. 设置断点断点是一个程序中的特定位置,当程序执行到该位置时,会暂停执行,从而可以检查程序的状态。
可以使用"gdb"命令设置断点。
例如,要在程序的第10行设置一个断点,可以输入以下命令:```break 10```可以使用"break"命令指定函数名或文件名和行号来设置断点。
3. 运行程序在gdb中运行程序时,可以使用"run"命令。
如果程序需要命令行参数,可以在"run"命令后面添加这些参数。
例如,要运行程序并传递参数"arg1"和"arg2",可以输入以下命令:```run arg1 arg2```4. 执行程序在gdb中执行程序时,可以使用"continue"命令。
该命令会让程序继续执行,直到遇到下一个断点或程序结束。
5. 单步执行在gdb中,可以使用"next"命令逐行执行程序。
该命令会执行当前行,并将程序指针移到下一行。
如果当前行是函数调用,"next"命令会将程序指针移到函数的第一行。
6. 查看变量的值在gdb中,可以使用"print"命令查看变量的值。
例如,要查看变量"var"的值,可以输入以下命令:```print var```7. 修改变量的值在gdb中,可以使用"set"命令修改变量的值。
例如,要将变量"var"的值设置为10,可以输入以下命令:```set var = 10```8. 退出gdb在gdb中退出调试会话时,可以使用"quit"命令。
lldb常用调试命令一、简介lldb 是一个开源的调试工具,是 LLVM 项目的一部分,用于调试 C、C++、Objective-C 和 Swift 程序。
它提供了一套强大的命令集,用于在调试过程中查看和修改程序状态,以及分析和定位代码中的问题。
本文将介绍 lldb 常用的调试命令,帮助读者更好地使用 lldb 进行程序调试。
二、lldb命令基础在使用 lldb 进行调试之前,我们首先需要了解一些基础的命令。
以下是一些常用的 lldb 命令:1. helphelp命令用于显示 lldb 的帮助信息。
可以使用help命令查看所有可用的命令,或者使用help <command>查看某个特定命令的帮助信息。
2. runrun命令用于启动程序的执行。
在使用run命令之前,需要先使用target create命令指定要调试的可执行文件。
3. breakbreak命令用于设置断点。
可以使用break <line>在指定行上设置断点,或者使用break <function>在指定函数入口处设置断点。
4. continuecontinue命令用于继续执行程序,直到遇到下一个断点或程序结束。
5. nextnext命令用于单步执行程序,不会进入函数调用。
6. stepstep命令用于单步执行程序,会进入函数调用。
7. printprint命令用于打印变量的值。
可以使用print <var>打印指定变量的值,或者使用expression <expr>执行表达式并打印其值。
8. watchpointwatchpoint命令用于设置观察点。
可以使用watchpoint set expression <expr>在特定表达式的值发生变化时暂停程序的执行。
三、lldb高级调试命令除了基础的调试命令之外,lldb 还提供了一些高级的调试命令,用于更深入地分析和定位代码中的问题。
Linux下core⽂件调试⽅法在程序不寻常退出时,内核会在当前⼯作⽬录下⽣成⼀个core⽂件(是⼀个内存映像,同时加上调试信息)。
使⽤gdb来查看core⽂件,可以指⽰出导致程序出错的代码所在⽂件和⾏数。
1.core⽂件的⽣成开关和⼤⼩限制(1)使⽤ulimit -c命令可查看core⽂件的⽣成开关。
若结果为0,则表⽰关闭了此功能,不会⽣成core⽂件。
通过上⾯的命令修改后,⼀般都只是对当前会话起作⽤,当你下次重新登录后,还是要重新输⼊上⾯的命令,所以很⿇烦。
我们可以把通过修改 /etc/profile⽂件来使系统每次⾃动打开。
步骤如下:1.⾸先打开/etc/profile⽂件⼀般都可以在⽂件中找到这句语句:ulimit -S -c 0 > /dev/null 2>&1.ok,根据上⾯的例⼦,我们只要把那个0 改为 unlimited 就ok了。
然后保存退出。
2.通过source /etc/profile 使当期设置⽣效。
3.通过ulimit -c 查看下是否已经打开。
其实不光这个命令可以加⼊到/etc/profile⽂件中,⼀些其他我们需要每次登录都⽣效的都可以加⼊到此⽂件中,因为登录时linux都会加载此⽂件。
⽐如⼀些环境变量的设置。
还有⼀种⽅法可以通过修改/etc/security/limits.conf⽂件来设置,⾸先以root权限登陆,然后打开/etc/security/limits.conf⽂件,进⾏配置:#vim /etc/security/limits.conf<domain> <type> <item> <value>* soft core unlimited(2)使⽤ulimit -c filesize命令,可以限制core⽂件的⼤⼩(filesize的单位为kbyte)。
若ulimit -c unlimited,则表⽰core⽂件的⼤⼩不受限制。
GDB章节GDB是linux下常用的应用程序调试工具,本文介绍linux环境下一些常用的调试命令,并通过交叉编译移植GDB到Android开发板上。
主机系统环境:Linux TS-Server2.6.32-21-generic-pae#32-Ubuntu SMP Fri Apr1609:39:35UTC 2010i686GNU/Linux目标板环境:Linux localhost3.0.31-00003-OMAP-Android-01831-gf9b35ae#4SMP PREEMPT Fri Sep708:19:55CST2012armv7l GNU/Linux交叉编译工具版本:gcc version4.4.1(Sourcery G++Lite2010q1-202)(target:arm-none-linux-gnueabi)GDB源码版本7.2:下载地址http://202.109.143.228:82/down/gdb-7.2.tar.gz或/gnu/gdb/gdb-7.3.1.tar.gz(官网最新版)GDB依赖库ncurses:下载地址/pub/gnu/ncurses/ncurses-5.8.tar.gz环境变量说明:export CC_PATH=/home/lichao/android/arm/opt/CodeSourcery/bin//交叉编译工具链路径export SRC_GDB=~/Download一.GDB常用命令命令介绍:gdb>list//列出源码,默认源码文件和执行文件同路径gdb><回车>//重复上次命令gdb>break10//在第十行下断点gdb>break func//在函数func入口下断点gdb>info break//查看断点信息gdb>info args//打印当前函数参数名和值gdb>info locals//打印当前函数所有局部变量和值gdb>disassemblefunc//查看函数func的汇编代码gdb>run//运行程序gdb>next//单条语句执行gdb>n//等同nextgdb>continue//继续运行gdb>p i//打印变量值,等同于printgdb>bt//查看函数堆栈gdb>shell<command>//执行shell命令gdb>clear<linenum>//清除断点,相关命令有delete/disable/enablegdb>step//单步运行二.移植GDB到Omap4460开发板(跑的是Android4.0)1.解压配置$mkdir~/gdb$cp$SRC_GDB/gdb-7.2.tar.gz~/gdb$cd~/gdb$tar xvf gdb-7.2.tar.gz-C.$cd gdb-7.2$export PATH=$CC_PATH:$PATH//追加交叉编译工具链至path中,请确保成功添加$./configure--host=arm-none-linux-gnueabi--prefix=/home/lichao/gdb/arm_gdb(上面指定的host表示目标主机所需的编译器前缀,而prefix有可能设置全路径而不是带环境变量的路径安装路径,请注意)以上都ok,如果有问题,请检查你的交叉编译工具链环境变量和相关操作是否正确。
gdb 列举断点-回复GDB(GNU调试器)是一个功能强大的开源调试工具,可用于调试C、C ++等编程语言。
其中,设置和管理断点是GDB中重要的功能之一。
断点是用于在程序执行期间中断程序的特殊指令。
通过在关键点上设置断点,开发人员可以检查程序状态,跟踪变量和执行路径,并诊断潜在问题。
在本文中,我们将介绍如何使用GDB设置和管理断点。
第一步:理解断点的类型在使用GDB设置断点之前,让我们首先了解常见的断点类型。
GDB支持多种类型的断点,包括以下几种:1. 行断点(Line breakpoints):在源代码的特定行设置断点,使程序在此处中断。
2. 函数断点(Function breakpoints):在特定函数的入口设置断点,使程序在调用该函数时中断。
3. 条件断点(Conditional breakpoints):设置一个表达式,只有在表达式为真时,程序才会在这个断点处中断。
4. 硬件断点(Hardware breakpoints):使用处理器支持的硬件断点机制设置断点。
硬件断点通常比软件断点更快,但数量有限,且某些调试器可能不支持。
5. 数据写入断点(Write watchpoints):在特定内存地址上设置断点,使程序在写入该地址时中断。
6. 数据读取断点(Read watchpoints):在特定内存地址上设置断点,使程序在读取该地址时中断。
第二步:编译程序并使用GDB启动调试会话要设置和管理断点,首先需要编译程序时启用调试信息。
使用C语言编译器(如gcc)时,可以添加-g选项,该选项会生成调试符号。
例如,在Linux上编译名为"program.c"的C程序时,可以使用以下命令:gcc -g program.c -o program接下来,使用GDB启动调试会话。
在命令行中输入"gdb program",其中"program"是编译生成的可执行文件。
调试Linux下的C程序 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 3、当程序被停住时,可以检查此时你的程序中所发生的事。 4、动态的改变你程序的执行环境。
从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。
一个调试示例 ——————
源程序:tst.c 1 #include 2 3 int func(int n) 4 { 5 int sum=0,i; 6 for(i=0; i 7 { 8 sum+=i; 9 } 10 return sum; 11 } 12 13 14 main() 15 { 16 int i; 17 long result = 0; 18 for(i=1; i<=100; i++) 19 { 20 result += i; 21 } 22 23 printf("result[1-100] = %d ", result ); 24 printf("result[1-250] = %d ", func(250) ); 25 }
编译生成执行文件:(Linux下) hchen/test> cc -g tst.c -o tst
使用GDB调试: hchen/test> gdb tst <---------- 启动GDB GNU gdb 5.1.1 Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-suse-linux"... (gdb) l <-------------------- l命令相当于list,从第一行开始例出原码。 1 #include 2 3 int func(int n) 4 { 5 int sum=0,i; 6 for(i=0; i 7 { 8 sum+=i; 9 } 10 return sum; (gdb) <-------------------- 直接回车表示,重复上一次命令 11 } 12 13 14 main() 15 { 16 int i; 17 long result = 0; 18 for(i=1; i<=100; i++) 19 { 20 result += i; (gdb) break 16 <-------------------- 设置断点,在源程序第16行处。 Breakpoint 1 at 0x8048496: file tst.c, line 16. (gdb) break func <-------------------- 设置断点,在函数func()入口处。 Breakpoint 2 at 0x8048456: file tst.c, line 5. (gdb) info break <-------------------- 查看断点信息。 Num Type Disp Enb Address What 1 breakpoint keep y 0x08048496 in main at tst.c:16 2 breakpoint keep y 0x08048456 in func at tst.c:5 (gdb) r <--------------------- 运行程序,run命令简写 Starting program: /home/hchen/test/tst
Breakpoint 1, main () at tst.c:17 <---------- 在断点处停住。 17 long result = 0; (gdb) n <--------------------- 单条语句执行,next命令简写。 18 for(i=1; i<=100; i++) (gdb) n 20 result += i; (gdb) n 18 for(i=1; i<=100; i++) (gdb) n 20 result += i; (gdb) c <--------------------- 继续运行程序,continue命令简写。 Continuing. result[1-100] = 5050 <----------程序输出。
Breakpoint 2, func (n=250) at tst.c:5 5 int sum=0,i; (gdb) n 6 for(i=1; i<=n; i++) (gdb) p i <--------------------- 打印变量i的值,print命令简写。 = 134513808 (gdb) n 8 sum+=i; (gdb) n 6 for(i=1; i<=n; i++) (gdb) p sum = 1 (gdb) n 8 sum+=i; (gdb) p i = 2 (gdb) n 6 for(i=1; i<=n; i++) (gdb) p sum = 3 (gdb) bt <--------------------- 查看函数堆栈。 #0 func (n=250) at tst.c:5 #1 0x080484e4 in main () at tst.c:24 #2 0x400409ed in __libc_start_main () from /lib/libc.so.6 (gdb) finish <--------------------- 退出函数。 Run till exit from #0 func (n=250) at tst.c:5 0x080484e4 in main () at tst.c:24 24 printf("result[1-250] = %d ", func(250) ); Value returned is = 31375 (gdb) c <--------------------- 继续运行。 Continuing. result[1-250] = 31375 <----------程序输出。
Program exited with code 027. <--------程序退出,调试结束。 (gdb) q <--------------------- 退出gdb。 hchen/test>
好了,有了以上的感性认识,还是让我们来系统地认识一下gdb吧。
使用GDB ————
一般来说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的方法有以下几种: 1、gdb program也就是你的执行文件,一般在当然目录下。
2、gdb core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。
3、gdb 如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。 GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb -help查看。我在下面只例举一些比较常用的参数:
-symbols -s 从指定文件中读取符号表。
-se file 从指定文件中读取符号表信息,并把他用在可执行文件中。
-core -c 调试时core dump的core文件。
-directory -d 加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。
GDB的命令概貌 ———————
启动gdb后,就你被带入gdb的调试环境中,就可以使用gdb的命令开始调试程序了,gdb的命令可以使用help命令来查看,如下所示:
/home/hchen> gdb GNU gdb 5.1.1 Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-suse-linux". (gdb) help List of classes of commands:
aliases -- Aliases of other commands breakpoints -- Making program stop at certain points data -- Examining data files -- Specifying and examining files internals -- Maintenance commands