gdb的helloworld
程序员文章站
2022-07-14 20:58:35
...
想起东软的1个linux老师,就讲了两天基本就把这书讲完了,
刚买了本书,一定要一星期内看完
《debug hacks》
源码在http://www.oreilly.co.jp/books/9784873114040/
日语,google翻译吧
奶奶的幸好哥我练过,要不被你成那啥呀~
先 ulimit -c 内核转储文件的大小限制
ulimit -c 1073741842
或开机启动
vim /etc/profile
再故意写个错代码
这个意思似乎是0是系统的,不能访问
test.c
gcc -p -g test.c
./a.out
生成core*
gdb -c core.1234 ./a.out
l 6
Quit
------------------
在固定位置/var/core/生成内核转储
cat /etc/sysctl.conf
sysctl -p
cat /proc/sys/kernel/core_pattern
参考http://wenku.baidu.com/view/6518f4d376eeaeaad1f330e0.html
http://dsec.pku.edu.cn/~yuhj/wiki/gdb.html
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命令
刚买了本书,一定要一星期内看完
《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命令
上一篇: R初学——Apriori算法笔记
下一篇: LINUX 中不能用命令了…………
推荐阅读
-
云网广告中的代码,提示出错,大家找找
-
ASP.NET Web Api 2实现多文件打包并下载文件的实例
-
对handlerexecutionchain类的深入理解
-
SQL 统计一个数据库中所有表记录的数量
-
MySQL 不允许从远程访问的解决方法
-
linux下备份MYSQL数据库的方法
-
将ocx文件转换成C#程序引用的DLL文件的办法
-
MySQL 5.7.16 修改密码提示 ERROR 1054 (42S22): Unknown column 'password' in 'field list'的原因
-
C#中StringBuilder用法以及和String的区别分析
-
c#在控制台输出彩色文字的方法