博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Use crash to show the code line of a backtrace entry like "ocfs2_truncate_file+0x127/0x6c0"
阅读量:6916 次
发布时间:2019-06-27

本文共 2634 字,大约阅读时间需要 8 分钟。

hot3.png

###1. Problem I am debugging a hung issue of ocfs2 (a cluster filesystem in linux kernel). This hung is

caused by a ocfs2 testcase named "mmap_truncate". Naturally, I show the status of this process
and cat the processes's stack as below:

# pgrep -a mmap_truncate24250 mmap_truncate -c 20 -s 300 /mnt/ocfs2//mmaptruncate.txt# cat /proc/24250/stack[
] call_rwsem_down_write_failed+0x13/0x20[
] ocfs2_truncate_file+0x127/0x6c0 [ocfs2][
] ocfs2_setattr+0x698/0xa90 [ocfs2][
] ocfs2_inode_unlock+0x33/0x80 [ocfs2][
] notify_change+0x1ae/0x380[
] do_truncate+0x5e/0x90[
] do_sys_ftruncate.constprop.11+0x108/0x160[
] entry_SYSCALL_64_fastpath+0x12/0x6d

What if I want to know the code line of a function where it hung up? For example:

ocfs2_truncate_file+0x127

###2. Howto

  • Install kernel debuginfo and debugsource packages,etc. I'm using SUSE linux:
zypper install kernel-default-debuginfo kernel-default-debugsource
  • Install ocfs2 kernel module debuginfo package if you're using SLES, while openSUSE is not needed to do so.
zypper in ocfs2-kmp-default-debuginfo
  • uncompress vmlinux-${uname -r}.gz img
#gunzip /boot/vmlinux-4.4.19-60-default.gz
  • invoke crash to analyze living system. You'd better get a overview of crash from man crash
crash  /boot/vmlinux-4.4.19-60-default
  • show if ocfs2 module is loaded by mod, and help mod for more info
crash> modffffffffa04d8440  ocfs2_stackglue         20480  (not loaded)  [CONFIG_KALLSYMS]ffffffffa04ecf40  ocfs2_nodemanager      225280  (not loaded)  [CONFIG_KALLSYMS]ffffffffa05e1c80  ocfs2                 1019904  (not loaded)  [CONFIG_KALLSYMS]
  • load ocfs2 module
crash> mod -s ocfs2     MODULE       NAME                     SIZE  OBJECT FILEffffffffa05e1c80  ocfs2                 1019904  /lib/modules/4.4.19-60-default/kernel/fs/ocfs2/ocfs2.ko
  • show the code line of ocfs2_truncate_file+0x127, and search the output for the offset near 0x127==295
crash> dis -l ocfs2_truncate_file.../usr/src/debug/kernel-default-4.4.19/linux-4.4/linux-obj/../fs/ocfs2/file.c: 4830xffffffffa0545717 
: mov 0x18(%rsp),%rax0xffffffffa054571c
: lea 0x278(%r12),%rsi0xffffffffa0545724
: lea 0x230(%rax),%rdi0xffffffffa054572b
: callq 0xffffffffa0568480
...
  • Jump to the line of source code!
vi /usr/src/debug/kernel-default-4.4.19/linux-4.4/linux-obj/../fs/ocfs2/file.c +483

and we got it!

down_write(&OCFS2_I(inode)->ip_alloc_sem);

感谢来自亚马逊的于鹏给予的帮助!

转载于:https://my.oschina.net/u/2475751/blog/740973

你可能感兴趣的文章
基于 Redis驱动的 Laravel 事件广播
查看>>
图书管理系统【用户、购买、订单模块、添加权限】
查看>>
JavaScript30秒, 从入门到放弃之Array(六)
查看>>
RabbitMQ的安装和使用
查看>>
WebAssembly起步
查看>>
基于CentOS搭建Hexo博客--设置NexT主题及个性化定制
查看>>
百度移动端首页秒开学习
查看>>
【304天】每日项目总结系列042(2017.12.06)
查看>>
数人云|给还在犹豫选择的你,微服务架构与整体架构的各自优势
查看>>
ES6之数值的扩展
查看>>
JavaScript Event loop 事件循环
查看>>
Java究极打基础之ArrayList篇
查看>>
Java窗口(JFrame)从零开始(4)——流布局+边界布局+网格布局
查看>>
手机office办公——微软推出安卓手机端Office Mobile应用
查看>>
MySQL忘记密码后重置密码(Mac )
查看>>
raid卡的常用命令
查看>>
JavaScript 类型转换
查看>>
谈谈基于机器学习的编程到底比传统编程强在哪里?
查看>>
终极指南:如何使用Visual Studio Code进行 Java 开发?
查看>>
GitHub发布2017年度开发者报告,用户达2400万
查看>>