`
haoningabc
  • 浏览: 1466327 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

gdb的helloworld

    博客分类:
  • gdb
阅读更多
想起东软的1个linux老师,就讲了两天基本就把这书讲完了,
刚买了本书,一定要一星期内看完
《debug hacks》
源码在http://www.oreilly.co.jp/books/9784873114040/
日语,google翻译吧
奶奶的幸好哥我练过,要不被你成那啥呀~
先 ulimit -c 内核转储文件的大小限制
ulimit -c 1073741842
或开机启动
vim /etc/profile
ulimit -S -c unlimited > /dev/null 2>&1

再故意写个错代码
这个意思似乎是0是系统的,不能访问
test.c
#include <stdio.h>
int main(){
    int *a=NULL;
    *a=0*1;
    return 0;
}

gcc -p -g test.c
./a.out
生成core*
gdb -c core.1234 ./a.out
l 6
Quit

------------------
在固定位置/var/core/生成内核转储
cat /etc/sysctl.conf
kernel.core_pattern=/var/core/%t-%e-%p-%c.core
kernel.core_uses_pid=0

sysctl -p
cat /proc/sys/kernel/core_pattern


参考http://wenku.baidu.com/view/6518f4d376eeaeaad1f330e0.html
http://dsec.pku.edu.cn/~yuhj/wiki/gdb.html

#include <stdio.h>
int globi=0;
int func(int n)
{
    globi=1;
    int sum=0,i;
    for(i=0; i<n; i++)
    {
        sum+=i;
    }
    return sum;
}


main()
{
    int i;
    long result = 0;
    for(i=1; i<=100; i++)
    {
        result += i;
    }

    printf("result[1-100] = %d \n", result );
    printf("result[1-250] = %d \n", func(250) );
}

cc -g tst.c -o tst
gdb tst
b 16   ------break 16行
info b -------info break
r --------run
n --------next
c --------continue
p i ----打印变量i
p sum
bt   --------查看函数堆栈。
set variable i=99  
c
q -----Quit
shell ls -------运行shell命令
make----

show args
set args

pwd
cd

info terminal
tty /dev/ttyb

watch globi ---------好像得是全局变量才能用
r

gdb <program> PID
调试运行的程序两种方法:
1、在UNIX下用ps查看正在运行的程序的PID(进程ID),然后用gdb <program> PID格式挂接正在运行的程序。
2、先用gdb <program>关联上源代码,并进行gdb,在gdb中用attach命令来挂接进程的PID。并用detach来取消挂接的进程

info program ------是否在运行

在gdb中,我们可以有以下几种暂停方式:断点(BreakPoint)、观
察点(Watch Point)、捕捉点(Catch Point)、信号(Signals)、
线程停止(Thread Stops)。如果要恢复程序运行,可以使用c或是
continue命令
分享到:
评论

相关推荐

    Linux操作系统第次gcc及gdb的使用PPT教案学习.pptx

    gdb helloworld 这将载入名为 helloworld 的可执行文件,并开始调试。我们可以使用 list 命令来查看源代码、使用 next 命令来执行一行源代码、使用 step 命令来执行一行源代码并进入函数内部、使用 run 命令来执行...

    深入浅出HelloWorld

    在深入探讨《深入浅出HelloWorld》这一主题时,我们首先需要理解HelloWorld程序在Linux环境下的运作机制。HelloWorld程序作为编程领域的入门经典,不仅仅是一行简单的代码,它背后蕴含了操作系统、编译原理、链接...

    linux 下c开发

    1. 使用`gdb`启动调试器,加载你的程序,如`gdb helloworld`。 2. 使用`list`命令查看源代码。 3. 使用`break`命令在特定行设置断点,如`break main`。 4. 使用`run`开始执行程序。 5. 使用`next`或`step`单步执行,...

    Linux 下C语言原理生动学习 -- Hello World的秘密

    02.Hello world的回忆 03.秘密一:main函数的原型 (1-3) 04.秘密二:main函数的返回值 (1-3) 05.秘密三:被隐藏的细节 (1-4) 06.秘密四:printf不见了(1-4) 07.秘密五:链接了哪些共享库 (1-3) 08.秘密六:调用共享...

    hello world程序深入详解

    ### "Hello World"程序深入详解 #### 深入剖析"Hello World"程序背后的机制 在探讨"Hello World"程序的深层次运作时,我们不仅关注这段简单代码本身,还涉及了它与操作系统以及编译原理之间的关系。这篇文章将从多...

    HelloWorld.zip

    add_executable(HelloWorld HelloWorld.cpp) # 添加可执行文件目标 ``` 完成这些配置后,通过VsCode的终端运行CMake命令来生成构建文件,然后使用内置的终端或外部终端执行构建命令。一旦编译成功,我们就可以在...

    s3c2410下的helloworld

    标题 "s3c2410下的helloworld" 指的是在S3C2410处理器上运行的一个简单的“Hello, World!”程序。S3C2410是Samsung公司生产的一款基于ARM920T内核的微处理器,广泛应用于嵌入式系统设计,特别是早期的Linux开发平台...

    mstar hello world 文档和源码

    【描述分析】:“mstar 的 helloworld 开发和源码,详细下载”描述中提到的“开发和源码”意味着这份资源不仅包括了如何编写“Hello World”程序的说明,还提供了实际的源代码,以便开发者可以下载、学习和实践。...

    Zynq ARM PS helloworld工程

    《Zynq ARM PS helloworld工程详解》 Zynq ARM PS helloworld工程是一个基础的嵌入式系统开发实例,旨在帮助开发者理解如何在Xilinx的Zynq片上系统(System-on-Chip,SoC)的处理系统(Processing System,PS)端...

    学习内核的肯定要些第一个程序helloworld

    2. **创建源代码文件**:创建一个C语言源代码文件,例如`helloworld.c`。在这个文件中,我们将编写基本的“Hello, World!”输出功能。 ```c #include #include #include MODULE_LICENSE("GPL"); MODULE_AUTHOR...

    GDB调试应用指南Guide.pdf

    例如,对于一个名为helloWorld的程序,可以使用命令"readelf -S helloWorld | grep debug"来检查程序文件中是否包含以"debug_"为前缀的段。如果这些段存在,如.debug_aranges、.debug_info、.debug_abbrev、.debug_...

    基于S3C2410的HELLOWORLD实验

    本实验的标题"基于S3C2410的HELLOWORLD实验"表明,我们将探讨如何在S3C2410处理器上运行一个简单的“Hello World”程序。这个基础实验通常用于初学者熟悉开发环境、编译工具链以及目标硬件平台的初步操作。 首先,...

    hello world on uClinux&& skyeye

    本节将详细介绍如何在SkyEye上配置和运行uClinux,并实现“Hello World”示例程序。 1. **下载并解压缩所需文件** - 首先需要下载`uClinux-dist-20080808.tar.bz2`和`arm-linux-tools-20061213.tar.gz`两个压缩包...

    GDB调试精粹及使用实例

    (gdb) call printf("Hello, World!") ``` #### 十、总结 GDB是一款功能强大的调试工具,通过本文档提供的实例,您可以快速上手并掌握GDB的基本使用方法,从而有效地提高程序调试效率。无论是初学者还是经验丰富的...

    dpdk-helloworld for windows

    在“dpdk-helloworld for windows”这个主题中,我们将专注于在Windows环境下如何使用DPDK进行基本的开发工作。 **DPDK的核心特性:** 1. **快速数据路径**:DPDK通过绕过常规的中断驱动网络协议栈,实现快速的...

    sdl-hello-world:在Nintendo Switch的屏幕上绘制“ hello world”

    标题“sdl-hello-world:在Nintendo Switch的屏幕上绘制“hello world””涉及的是一个项目,该项目使用SDL(Simple DirectMedia Layer)库在任天堂Switch游戏机上显示“hello world”这一经典的编程入门示例。...

    hello_world.rar_world

    标题“hello_world.rar_world”可能是指一个包含有关“helloworld”程序如何被集成到操作系统内核中的教程或文档的压缩文件。"helloworld"通常作为编程初学者的第一个例子,用于展示基本的程序编写和运行流程。然而...

    手把手教你玩转GDB

    - 预处理:gcc -E hello_world.c -o hello_world.i,使用cpp工具展开宏、替换头文件、删除注释。 - 编译:gcc -S hello_world.i -o hello_world.s,将预处理后的文件转换成汇编代码。 - 汇编:gcc -c hello_world...

    vs code编译C++工程实例,helloworld

    在VS Code中,打开一个新的工作区,然后创建一个名为`helloworld`的文件夹。在这个文件夹内,新建一个名为`main.cpp`的文件。 **编写代码** 在`main.cpp`文件中,输入以下C++代码: ```cpp #include int main() {...

    实验3使用gcc编译器.pdf

    2. 使用 vi 编写 helloworld.cpp 程序或 helloworld.c 程序,保存。 3. 利用 g++ helloworld.cpp 或 gcc helloworld.c 指令编译执行。 4. 使用 make 工具和调试工具 gdb。 三、make工具 make工具在应用程序的开发...

Global site tag (gtag.js) - Google Analytics