当前位置: 技术问答>linux和unix
请问linux如何调试动态库!
来源: 互联网 发布时间:2016-09-07
本文导语: 我写的代码在目录a,需要调用目录b里的动态库,我把目录b里的动态库拷贝到目录a中,我想在调试程序a的时候,能够进入动态库里的源代码,进行调试,请问该如何做。谢谢! | 前提: 1. ...
我写的代码在目录a,需要调用目录b里的动态库,我把目录b里的动态库拷贝到目录a中,我想在调试程序a的时候,能够进入动态库里的源代码,进行调试,请问该如何做。谢谢!
|
前提:
1. 要有动态库的源代码
2. 动态库要用-g编译
然后还要做一些设置,参考这个
1)文件列表:
> ls -l
-rw-r--r-- 1 hchen wheel 209 Nov 16 11:08 get.c
-rw-r--r-- 1 hchen wheel 28 Nov 16 11:07 get.h
-rw-r--r-- 1 hchen wheel 237 Nov 16 11:08 main.c
-rw-r--r-- 1 hchen wheel 213 Nov 16 11:52 makefile
2)Makefile的样子
> cat ./makefile
all:main
libget.so:get.c
gcc -g -c -o get.o get.c
gcc -g -shared -o libget.so get.o
main:main.c libget.so
gcc -g -c -o main.o main.c
gcc -g -o main main.o -L./ -lget
clean:
@rm libget.so get.o main.o main
3)编译程序
> make
gcc -g -c -o get.o get.c
gcc -g -shared -o libget.so get.o
gcc -g -c -o main.o main.c
gcc -g -o main main.o -L./ -lget
4)设置LD_LIBRARY_PATH环境变量
> setenv LD_LIBRARY_PATH ${PWD}
> env | grep LD
LD_LIBRARY_PATH=/home/hchen/test/so
5)用GDB调试(step in)
> gdb ./main
(gdb) break main
Breakpoint 1 at 0x80484d0: file main.c, line 5.
(gdb) r
Starting program: /home/hchen/test/so/main
Breakpoint 1, main (argc=1, argv=0xbfe62fc4) at main.c:5
5 int a = 100;
(gdb) n
6 int b = get ();
(gdb) s
1. 要有动态库的源代码
2. 动态库要用-g编译
然后还要做一些设置,参考这个
1)文件列表:
> ls -l
-rw-r--r-- 1 hchen wheel 209 Nov 16 11:08 get.c
-rw-r--r-- 1 hchen wheel 28 Nov 16 11:07 get.h
-rw-r--r-- 1 hchen wheel 237 Nov 16 11:08 main.c
-rw-r--r-- 1 hchen wheel 213 Nov 16 11:52 makefile
2)Makefile的样子
> cat ./makefile
all:main
libget.so:get.c
gcc -g -c -o get.o get.c
gcc -g -shared -o libget.so get.o
main:main.c libget.so
gcc -g -c -o main.o main.c
gcc -g -o main main.o -L./ -lget
clean:
@rm libget.so get.o main.o main
3)编译程序
> make
gcc -g -c -o get.o get.c
gcc -g -shared -o libget.so get.o
gcc -g -c -o main.o main.c
gcc -g -o main main.o -L./ -lget
4)设置LD_LIBRARY_PATH环境变量
> setenv LD_LIBRARY_PATH ${PWD}
> env | grep LD
LD_LIBRARY_PATH=/home/hchen/test/so
5)用GDB调试(step in)
> gdb ./main
(gdb) break main
Breakpoint 1 at 0x80484d0: file main.c, line 5.
(gdb) r
Starting program: /home/hchen/test/so/main
Breakpoint 1, main (argc=1, argv=0xbfe62fc4) at main.c:5
5 int a = 100;
(gdb) n
6 int b = get ();
(gdb) s