免费注册 查看新帖 |

Chinaunix

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

[其他] kgdb bt 跟 dump_stack() 差异 [复制链接]

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
1 [报告]
发表于 2015-10-08 17:16 |显示全部楼层
是同一个内核么?编译选项啥的都一样?

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
2 [报告]
发表于 2015-10-12 16:58 |显示全部楼层
本帖最后由 nswcfd 于 2015-10-12 17:34 编辑

这个kgdb可以打印出行号信息, 是通过串口打印出来的远程设备的栈?

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
3 [报告]
发表于 2015-10-12 18:48 |显示全部楼层
在本机使用kdb(不是kgdb)的bt命令打印的stack trace是什么样子?
看代码跟dump_stack一样,都是调用了show_stack,估计是类似的?

kgdb是在kernel端实现了一个gdb stub,具体的bt是由对端的gdb完成的,
gdb有debug信息,但还是不明白为什么能够把栈展开的更详细一些(毕竟stack上的内容都是一样的)?

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
4 [报告]
发表于 2015-10-12 19:08 |显示全部楼层
本帖最后由 nswcfd 于 2015-10-12 19:11 编辑

以下高亮部分是有区别的地方,可以发现,这些地方都没有栈的指针。
这些信息应该是gdb自己添加进去的。

#0  lowmem_shrink (s=<optimized out>, sc=0xec923c84) at drivers/staging/android/lowmemorykiller.c:89 */
#1 0xc00a0374 in do_shrinker_shrink (nr_to_scan=0, sc=0xec923d78, shrinker=0xc0518488 <lowmem_shrinker> at mm/vmscan.c:277
#2  shrink_slab (shrink=0xec923d78, shrink@entry=0xec923d70, nr_pages_scanned=1, lru_pages=3226603292, lru_pages@entry=52207) at mm/vmscan.c:326
#3  0xc00a3010 in do_try_to_free_pages (shrink=0xec923d70, sc=0xec923d78, zonelist=0xc0520830 <contig_page_data+2208> at mm/vmscan.c:2426
#4  try_to_free_pages (zonelist=zonelist@entry=0xc0520830 <contig_page_data+2208>, order=order@entry=64, gfp_mask=gfp_mask@entry=131290, nodemask=nodemask@entry=0x0)
    at mm/vmscan.c:2509

#5  0xc0097c24 in __alloc_pages_direct_reclaim (did_some_progress=<synthetic pointer>, migratetype=131290, preferred_zone=0x40, alloc_flags=2, nodemask=0x0,
    high_zoneidx=<optimized out>, zonelist=0xc0520830 <contig_page_data+2208>, order=0, gfp_mask=131290) at mm/page_alloc.c:2129
#6  __alloc_pages_slowpath (migratetype=131290, preferred_zone=0x1, nodemask=0x0, high_zoneidx=ZONE_MOVABLE, zonelist=0xc0520830 <contig_page_data+2208>, order=0, gfp_mask=131290)
    at mm/page_alloc.c:2351

#7  __alloc_pages_nodemask (gfp_mask=131290, order=order@entry=0, zonelist=0xc0520830 <contig_page_data+2208>, nodemask=nodemask@entry=0x0) at mm/page_alloc.c:2479
#8  0xc00b11a8 in __alloc_pages (zonelist=<optimized out>, order=0, gfp_mask=131290) at include/linux/gfp.h:302
#9  alloc_pages_node (order=0, gfp_mask=131290, nid=<optimized out> at include/linux/gfp.h:312
#10 __alloc_zeroed_user_highpage (vaddr=793632768, vma=0xecefd230, movableflags= at include/linux/highmem.h:192
#11 alloc_zeroed_user_highpage_movable (vaddr=793632768, vma=0xecefd230) at include/linux/highmem.h:214
#12 do_anonymous_page (flags=3221952572, pmd=0xecefd230, page_table=0xec1fc378, address=793632768, vma=0xecefd230, mm=0xec905c80) at mm/memory.c:3179
#13 handle_pte_fault (mm=mm@entry=0xec905c80, vma=vma@entry=0xecefd230, address=address@entry=793632768, pte=0xec1fc378, pmd=pmd@entry=0xec92cbd0, flags=flags@entry=41)
    at mm/memory.c:3484
#14 0xc00b183c in handle_mm_fault (mm=mm@entry=0xec905c80, vma=vma@entry=0xecefd230, address=address@entry=793632768, flags=flags@entry=41) at mm/memory.c:3598
#15 0xc0013c0c in __do_page_fault (tsk=0xec91c400, flags=41, fsr=2071, addr=793632768, mm=0xec905c80) at arch/arm/mm/fault.c:247
#16 do_page_fault (addr=793632768, fsr=2071, regs=0xec923fb0) at arch/arm/mm/fault.c:309
#17 0xc00083b0 in do_DataAbort (addr=793632768, fsr=2071, regs=0xec923fb0) at arch/arm/mm/fault.c:548
#18 0xc000dc74 in __dabt_usr () at arch/arm/kernel/entry-armv.S:410

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
5 [报告]
发表于 2015-10-12 19:20 |显示全部楼层
估计inline和tail call(*)共同作用的结果。

(*)忘了具体的术语叫啥了,如果函数f1()的最后一条语句是函数调用(例如return f2()),
那么call f2可以用jmp f2来优化,其结果是在栈上没有f1的信息(在omit-frame-pointer的条件下)。

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
6 [报告]
发表于 2015-10-13 16:14 |显示全部楼层
      -foptimize-sibling-calls
           Optimize sibling and tail recursive calls.

           Enabled at levels -O2, -O3, -Os.

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
7 [报告]
发表于 2015-10-13 16:22 |显示全部楼层
本帖最后由 nswcfd 于 2015-10-13 16:25 编辑

回复 4# shihyu

方便给出gcc、gdb的版本信息,以及内核的具体编译选项么?(利用make V=1查看即可)
  1. [test]$ cat Makefile
  2. obj-m += aaa.o
  3. all:
  4.         make -C /path/to/kernel/source/root/ M=`pwd` V=1

  5. [test]$ cat aaa.c
  6. #include <linux/kernel.h>
  7. #include <linux/module.h>
  8. void myf(void) {}
  9. EXPORT_SYMBOL(myf);

  10. [test]$ make V=1
复制代码

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
8 [报告]
发表于 2015-10-14 12:10 |显示全部楼层
不是,看bt的输出。注意7楼黄色行和蓝色行的区别。
#0  lowmem_shrink (s=<optimized out>, sc=0xec923c84) at drivers/staging/android/lowmemorykiller.c:89 */
#1 【0xc00a0374 in】 do_shrinker_shrink (nr_to_scan=0, sc=0xec923d78, shrinker=0xc0518488 <lowmem_shrinker> at mm/vmscan.c:277

lowmem_shrink前面没有0x.... in(【】里的部分),而do_shrink_shrink有。
lowmem_shrink没有出现在dump_stack里面。

PS1,只有配置文件的话,还是看不出来实际的gcc选项。能否参考10楼给出实际的gcc命令行?

PS2,kgdb的bt内容是命中某个breakpoint之后结果(比如这里在lowmem_shrink设置了断点),还是一步一步step in之后的结果(例如从do_page_falut设断点后命中,然后单步调试到lowmem_shrink)?


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP