Linux系统内核深入探密(下)

 多数 Linux 分发版包含一个 Electric Fence 包,不过您也可以选择下载它。Electric Fence 是一个由 Bruce Perens 编写的 malloc()&">nbsp;调试库。它就在您分配内存后分配受保护的内存。如果存在 fencepost 错误(超过数组末尾运行),程序就会产生保护错误,并立即结束。通过结合 Electric Fence 和 gdb,您可以精确地跟踪到哪一行试图访问受保护内存。 Electric Fence 的另一个功能就是能够检测内存泄漏。

  strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。strace 显示这些调用的参数并返回符号形式的值。 strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。将跟踪信息发送到应用程序及内核开发者都很有用。在清单 6 中,分区的一种格式有错误,清单显示了 strace 的开头部分,内容是关于调出创建文件系统操作(mkfs)的。strace 确定哪个调用导致问题出现。

  清单 6. mkfs 上 strace 的开头部分

  [code:1:95b8e28830]execve("/sbin/mkfs.jfs", ["mkfs.jfs", "-f", "/dev/test1"], &

  ...

  open("/dev/test1", O_RDWR|O_LARGEFILE) = 4

  stat64("/dev/test1", {st_mode=&, st_rdev=makedev(63, 255), ...}) = 0

  ioctl(4, 0x40041271, 0xbfffe128) = -1 EINVAL (Invalid argument)

  write(2, "mkfs.jfs: warning - cannot setb" ..., 98mkfs.jfs: warning -

  cannot set blocksize on block device /dev/test1: Invalid argument )

  = 98

  stat64("/dev/test1", {st_mode=&, st_rdev=makedev(63, 255), ...}) = 0

  open("/dev/test1", O_RDONLY|O_LARGEFILE) = 5

  ioctl(5, 0x80041272, 0xbfffe124) = -1 EINVAL (Invalid argument)

  write(2, "mkfs.jfs: can''t determine device"..., ..._exit(1)

  = ?[/code:1:95b8e28830]

  清单 6 显示 ioctl 调用导致用来格式化分区的 mkfs 程序失败。ioctl BLKGETSIZE64 失败。(BLKGET- SIZE64 在调用 ioctl 的源代码中定义。) BLKGETSIZE64 ioctl 将被添加到 Linux 中所有的设备,而在这里,逻辑卷管理器还不支持它。因此,如果 BLKGETSIZE64 ioctl 调用失败,mkfs 代码将改为调用较早的 ioctl 调用;这使得 mkfs 适用于逻辑卷管理器。

[b:627becdd94][size=18:627becdd94] 第 3 种情况:使用 gdb 和 Oops[/size:627becdd94][/b:627becdd94]

  您可以从命令行使用 gdb 程序(Free Software Foundation 的调试器)来找出错误,也可以从诸如 Data Display Debugger(DDD)这样的几个图形工具之一使用 gdb 程序来找出错误。您可以使用 gdb 来调试用户空间程序或 Linux 内核。这一部分只讨论从命令行运行 gdb 的情况。

  使用 gdb program name 命令启动 gdb。gdb 将载入可执行程序符号并显示输入提示符,让您可以开始使用调试器。您可以通过三种方式用 gdb 查看进程:

   使用 attach 命令开始查看一个已经运行的进程;attach 将停止进程。

   使用 run 命令执行程序并从头开始调试程序。

   查看已有的核心文件来确定进程终止时的状态。要查看核心文件,请用下面的命令启动 gdb。

  gdb programname corefilename

  要用核心文件进行调试,您不仅需要程序的可执行文件和源文件,还需要核心文件本身。要用核心文件启动 gdb,请使用 -c 选项:

  gdb -c core programname

  gdb 显示哪行代码导致程序发生核心转储。

  在运行程序或连接到已经运行的程序之前,请列出您觉得有错误的源代码,设置断点,然后开始调试程序。您可以使用 help 命令查看全面的 gdb 在线帮助和详细的教程。

时间: 2024-09-22 00:49:37

Linux系统内核深入探密(下)的相关文章

Linux系统内核深入探密(上)

KDB 入门指南 调试内核问题时,能够跟踪内核执行情况并查看其内存和数据结构是非常有用的.Linux 中的内置内 核调试器 KDB 提供了这种功能.在本文中您把了解怎么样&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; 使用 KDB 所提供的功能,以及怎么样在 Linux 机器上安装和设置 KDB.您还把熟悉 KDB 中可以使用的命令以及设置和显示选项. Linux 内核调试器(KDB)允许您调试 Linux 内核

java-有没有人用过common.net jar向linux发送命令,请指教下,谢谢

问题描述 有没有人用过common.net jar向linux发送命令,请指教下,谢谢 发送一些正常的命令没有问题,像ls.date这类,但是发送不可识别的按键的时候就会出现问题,像F3,方向键等等,

linux中在文件夹下新建文档属于写操作(w)还是执行(x)操作

问题描述 linux中在文件夹下新建文档属于写操作(w)还是执行(x)操作 众所周知,linux下文档和文件夹都有rwx操作,读鸟哥的私房菜中说不能在没有x权限的文件夹下执行一些命令,比如man,ll等,那在文件夹中新建文档是属于写操作还是执行操作? 解决方案 这要看你是怎样新建的这个文件,比如用 touch 来创建的文件,正常情况下就不会有x权限. 但如果你有执行gcc的权限,那么你用gcc编译一个自己写的c文件得到一个可执行执行程序时通常就有x权限了. 还有一些脚本文件,一般新建时用vi或e

linux脚本-linux同时执行一个目录下的所有脚本。

问题描述 linux同时执行一个目录下的所有脚本. linux同时执行一个目录下的所有脚本,我使用的是下面的命令: #!/system/bin/sh for file in ls /data/misc/scripttest/*.sh do $file done 这样的话可以执行所有的脚本,但是他是等前面一个脚本执行完成之后才执行后面一个的,怎么样写才能让这个目录下的所有脚本同时被执行呢?谢谢 解决方案 linux中,命令后面加上取地址符'&',表示此条命令在当前登录用户中转入后台执行.如果当前登

随着下一个预览版本的推出,Linux SQL Server 2017镜像下载量超过了100万

本文讲的是随着下一个预览版本的推出,Linux SQL Server 2017镜像下载量超过了100万[译者的话]这篇文章介绍了在Linux Container中运行SQL Server的方案及其优势以及部分客户案例.SQL Server在很多企业中广泛运用,其容器化所带来的效益值得我们思考和借鉴. [3 天烧脑式容器存储网络训练营 | 深圳站]本次培训以容器存储和网络为主题,包括:Docker Plugin.Docker storage driver.Docker Volume Pulgin.

WebRTC 国内不翻墙下载编译Linux\Android版,已下23G【未完成版】

WebRTC 国内不翻墙下载编译Linux\Android版,已下23G[未完成版] mkdir /webrtccd /webrtcgit clone https://source.codeaurora.org/quic/lc/chromium/tools/depot_tools.gitexport PATH=`pwd`/depot_tools:"$PATH"cd depot_tools 下载webrtc fetch过的Android版(http://pan.baidu.com/s/1

真正高安全级别的实验室什么样?探密AZ Labs

本文讲的是真正高安全级别的实验室什么样?探密AZ Labs,在这个租来的特别办公室里,网络被防火墙.保安,以及法拉第静电屏蔽罩层层保护. 你的数据中心和IT研究设施有多安全?除非你是在为军方承包商工作,否则是就别想达到亚利桑那州梅萨市的AZ Labs(亚里桑那实验室)的安全级别. AZ Labs就是个电子堡垒,就像冷战剧集里面演的一样,这片由4栋建筑构成的区域"被认证为处于最高安全级别". 戴恩·穆雷尼克斯,AZ Labs主管,拒绝定义"最高级别"的含义,但很有可能

在Linux的xwindow桌面环境下如何截屏?

在Linux的xwindow桌面环境下如何截屏? 我们可以使用Khttp://www.aliyun.com/zixun/aggregation/11220.html">snapshot或者gimp这两款软件,安装操作如下: Ksnapshot软件 [root@localhost software]# wget http://www.ibiblio.org/pub/Linux/X11/xutils/ksnapshot-0.2.7.tar.gz[root@localhost software]

Linux系统CENTOS 6.8下安装锐速的教程

锐速可能还有很多朋友没有听说过,不仅可以加速Web访问,官方的说明为锐速(ServerSpeeder)加速软件是一种基于ZETATCP加速引擎的软件,可以起到显著加速效果的 TCP 加速技术,增强VPS/服务器连接的稳定性,且有效的提高服务器的带宽利用率.不过有很多朋友是基于Linux 系统CENTOS 6.8,有时候出现了不能安装锐速的情况,由于锐速官方尚不支持centos6.8,所以centos6.8想要安装锐速就要降级内核. 另外,据说这玩意居然还可以提高VPN的访问速度,像部落之前介绍过