高分求教:linux下怎样调试动态和静态库??

NNBWOLF 2006-06-10 03:23:37
如题,调试三种方式下库的:
1 gcc 静态库
2 gcc 动态库的隐式调用
3 gcc的显式调用(用dlopen()等调用的)

非常感谢,只用gdb调试过进程,听说也可以调试库,请大侠指教.
...全文
650 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shavey 2006-06-13
  • 打赏
  • 举报
回复
编译库时,加上-g
可用模拟器等调试ddd或debuger
eqxu 2006-06-13
  • 打赏
  • 举报
回复
原来还有这么多的东西啊


我只会前两个




多谢!!!
NNBWOLF 2006-06-13
  • 打赏
  • 举报
回复
谢谢各位,道理捂出来了.几天不见回了那么多帖子,谢谢大家.
1 动态库的生成
gcc -shared -o libmytest.so print.c
2 动态库的隐式调用
gcc -o main main.c -lmytest

注意要ldconfig刷新和ld.so.conf的配置.

3 动态库的显示调用
gcc -o main main.c -rdynamic -ldl
dlopen() dlsysm() dlclose()
4 静态库用ar命令,省略
加-g参数,调试库和其它代码一样就可以了.
ydogg 2006-06-12
  • 打赏
  • 举报
回复
只要你有库的源码,指定库源文件路径即可.和调试进程没有什么区别.
bluedreammer 2006-06-12
  • 打赏
  • 举报
回复
同上,即编译库时,加上-g
  • 打赏
  • 举报
回复
如果说是可以用gdb来调试的话,那么这些库(静态、动态的)必须是开发库,开发库就是包含调试信息的库,即在生成目标文件(.o文件)的时候要加上-g(-gstabs)参数,加上了-g参数后生成的目标文件会包含许多调试的相关信息,包括行号、函数名、变量名等。如果没有加上这个参数,取而代之的全是运行时的内存地址。所以通常加上-g参数生成的文件比没有加上-g要大得多。

所以,通常我们不能用gdb来调试系统里面的库,因为那些都不是开发库(可以节省很大的磁盘空间)。
我们可以调试自己打包生成的开发库,调试的方法跟普通的函数一样,只要调用库中的函数,然后用单步跟踪(gdb中用命令step或简写s)。
alaiyeshi 2006-06-11
  • 打赏
  • 举报
回复
我用过的最笨的方法是printf
sanban 2006-06-11
  • 打赏
  • 举报
回复
ddddddd

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧