免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: testh
打印 上一主题 下一主题

[实践] gdb可以实现源码级调试so文件吗?[己解决] [复制链接]

论坛徽章:
0
11 [报告]
发表于 2013-01-07 16:22 |只看该作者
我想进入line47-line50处的的snd_pcm_xxx函数中,所以把相应的行号加入了break,但是当执行到时,在line116时已经进入了 snd_pcm_open 处的断点,但是输入s(step)却没能进入它的源码中,而是直接执行完了再退出来了。
请教给如何进入snd_pcm_open()函数的源码呢,这个函数就是在需要调试的libasound.so库中。

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
12 [报告]
发表于 2013-01-07 17:45 |只看该作者
一般是先跑起来
然后ctrl+c
然后设断点,然后重新run就可以了

论坛徽章:
0
13 [报告]
发表于 2013-01-07 18:09 |只看该作者
现在可以跑起来,按照前面帖子的设置。
但是问题是只能在pcm_min.c这个测试程序中run,break,pcm_min.c这个测试程序调用了libasound.so.2.0.0这个动态库,而不能进入到alsa-lib的源码中,也就是生成libasound.so.2.0.0的源码中进行调试。

论坛徽章:
0
14 [报告]
发表于 2013-01-07 18:17 |只看该作者
呵呵,你可以找gdb的书看看,我就是看了那书设置了directory源码文件路径,然后把gdb相关的库(可以利用ldd gdb来查看)移植到我的kvm里面,然后调试alsa-1.0.25没有问题的,你编译alsa-lib及alsa-utils都加上CFLAGS=-g的选项就可以的.实在不行,我今天整理一下,把我搭建那些东西发个博客,到时你可以参考一下.
另外,你提到的问题,我以前也遇到过,自己公司弄的gdb工具在跟踪子函数里进不去,后来发现是gdb的问题,后来才利用qemu搭建一个X86平台来研究alsa库.
你可以编写一个简单的程序,例如:
int main()
{
func()
}
函数在func()子函数里设置断点,看看能否跟踪,先把问题简单化些.

论坛徽章:
0
15 [报告]
发表于 2013-01-07 18:23 |只看该作者
回复 14# frogsu


    感谢兄弟回复,如你所说,之前我测试过了,用简单的测试例程可以进入子函数跟踪,这些没有问题,晚上我回去再接着研究一下。如果你能够有时间整理一下是再好不过了,有劳了,如果兄弟暂时没时间的话我先弄着,就这个问题我将会随时更新进度,直到解决。

论坛徽章:
0
16 [报告]
发表于 2013-01-08 10:22 |只看该作者
找到了一个问题,使用info shared查看时显示:
  1. zz@ubuntu:/usr/local/usr/my_tools/alsa-lib-1.0.24.1/test/.libs$ gdb ./pcm_min
  2. GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2
  3. Copyright (C) 2010 Free Software Foundation, Inc.
  4. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
  5. This is free software: you are free to change and redistribute it.
  6. There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
  7. and "show warranty" for details.
  8. This GDB was configured as "i686-linux-gnu".
  9. For bug reporting instructions, please see:
  10. <http://www.gnu.org/software/gdb/bugs/>...
  11. Reading symbols from /usr/local/usr/my_tools/alsa-lib-1.0.24.1/test/.libs/pcm_min...done.
  12. (gdb) b main
  13. Breakpoint 1 at 0x804860d: file pcm_min.c, line 22.
  14. (gdb) b snd_pcm_open
  15. Breakpoint 2 at 0x80484d8
  16. (gdb) b snd_pcm_set_params
  17. Breakpoint 3 at 0x8048518
  18. (gdb) info b
  19. Num     Type           Disp Enb Address    What
  20. 1       breakpoint     keep y   0x0804860d in main at pcm_min.c:22
  21. 2       breakpoint     keep y   0x080484d8 <snd_pcm_open@plt>
  22. 3       breakpoint     keep y   0x08048518 <snd_pcm_set_params@plt>
  23. (gdb) r
  24. Starting program: /usr/local/usr/my_tools/alsa-lib-1.0.24.1/test/.libs/pcm_min
  25. [Thread debugging using libthread_db enabled]

  26. Breakpoint 1, main () at pcm_min.c:22
  27. 22          for (i = 0; i < sizeof(buffer); i++)
  28. (gdb) info shared
  29. From        To          Syms Read   Shared Object Library
  30. 0x00110830  0x001274cf  Yes (*)     /lib/ld-linux.so.2
  31. 0x0014d5d0  0x001f61f8  Yes (*)     /usr/lib/libasound.so.2
  32. 0x002164b0  0x00230b38  Yes (*)     /lib/i386-linux-gnu/libm.so.6
  33. 0x00239a40  0x0023a998  Yes (*)     /lib/i386-linux-gnu/libdl.so.2
  34. 0x00241610  0x0024d9d8  Yes (*)     /lib/i386-linux-gnu/libpthread.so.0
  35. 0x002578c0  0x0025b578  Yes (*)     /lib/i386-linux-gnu/librt.so.1
  36. 0x00275c10  0x00381524  Yes (*)     /lib/i386-linux-gnu/libc.so.6
  37. (*): Shared library is missing debugging information.
  38. (gdb)
复制代码
最后一句提示 共享库没有debugging information,但是我已经在alsa-lib-1.0.24-1/Makefile中的CFLAGS += -g 了,为什么还提示没有呢,然后顺着查找strip这个命令,并把STRIP=strip这句给注释了,然后对比注释前后的libasound.so.2.0.0的大小是一样的,说明没有变化。又得知alsa-lib使用的是libtool来生成的so,再继续查找一下libtool的用法。
有知道如何设置的兄弟指点下

论坛徽章:
0
17 [报告]
发表于 2013-01-08 10:41 |只看该作者
还以为说的ko文件。  最好还检查下你的程序使用的就是你编译的so文件。 检查 make的输出应该可以看到 那些 编译选择是不是起作用了吧。

论坛徽章:
0
18 [报告]
发表于 2013-01-08 11:10 |只看该作者
如何查看一个文件是否包含有debugging information

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
19 [报告]
发表于 2013-01-08 11:43 |只看该作者
你是想用gdb查什么问题

论坛徽章:
0
20 [报告]
发表于 2013-01-08 14:11 |只看该作者
回复 19# T-Bagwell



    感谢版主回复。我想用它来跟踪alsa-lib的调用流程,顺便深入了解gdb的使用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP