gdb的helloworld

想起东软的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
[color=red]http://dsec.pku.edu.cn/~yuhj/wiki/gdb.html[/color]

[code]
#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) );
}
[/code]
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命令
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值