⑦进入函数体内执行:s
⑧推出函数:finish
⑨退出调试:q
⑩显示: p + 变量名
①每次结果都会显示:display + 变量名
②取消该显示:undisplay + 变量名
③查看断点信息:info
④查看内存:x /nfu adress
n:显示数据的个数
F:显示进制数 x d o t c f---16 10 8 2 字符 浮点
u:以几字节显示:b h w g-- 1 2 4 8
⑤显示函数调用栈:bt
⑥查看变量类型:ptype + 变量名
p%20a
$1%20=%20{1,2,3,4,5,6,7,8,9,10}
p%20ptr
$%202%20=(int*)0xbffff2b4
p &ptr 和 p pptr 都为0xbffff2b0
问:怎么用指向一维数组的指针来表示数组的全部元素?
p *ptr@len10 //表示全部
p ptr[4]//第五个元素
上面已经提到linux命令,静态库的pdb是每个文件的调试信息的集合,而默认情况下静态库生成的pdb文件都是vcx0.pdb,例如vs2008就是vc90.pdb,vs2010就是vc100.pdb。查看.h和.c文件,发现.c文件中才是定义的那些函数的具体实现,结合第一次静态库的实践,这个.c文件就相当于那些add.c、sub.c...10-1的代码相当于那个main函数,所以可以将其做成一个静态库来使用,但是又出现了新问题。其根本原因也是找不到test()函数的实现文件,由于该test()函数的实现在test.a这个静态库中的,故在链接的时候需要在其后加入test.a这个库,链接命令修改为如下形式即可。
特点:
①:中间文件.o(功能代码)的集合linux命令,链接时使用。
②:静态库中的程序直接链接到可执行文件中。
③:静态库存于磁盘,当某个程序需要的时间,需要拷贝一份,然后合成到程序中,在一起加载到内存上运行。这样当多个程序调用时,会导致磁盘空间的浪费。
①*.c将所有的源文件编译生成中间文件*.o
②ar crv libxxx.a *.o //libxxx.a 中xxx为库名
gcc -o main main.c -L(+路径) -l(库名)
例如:
gcc -o main mian.c -L./lib -lmymath
因为静态库是在链接时使用,所以当我们在运行时,将静态库删除时,程序依然可以执行
Windows .dll Linux .so
①使用动态库的程序运行起来后,动态的将动态库加载到内存的执行。
②只需要在内存中加载一份,随后的程序在内存中运行时,不需要对此动态库重新加载到内存上。
③运行库需要单独加载到内存上执行。
方式一:gcc -fPIC -c add.c
gcc -fPIC -c sub,c
gcc -shared -o libxxx.so *.o
方式二:gcc -fPIC -shared -o libxxx,so *.c
gcc -o run main.c -L(+路径) -l(+库名) //和静态库相似
使用动态库的程序在运行时,需要单独加载搜索加载动态库文件,所以我们要高速操作系统搜索路径,或者将库拷贝到操作系统默认的搜索路径下。
①:root用户:将动态库拷贝到 /lib 或者 /usr/lib任意路径下
②:设置环境变量(仅对本终端有效)
Export LD_LIBRARY_PATH=绝对路径
例如:
Export LD_LIBRARY_PATH= $LD_LIBRARY_PATH’:/home/wangbao/lib’
③修改配置文件: