anzhsoft的技术专栏

专注分布式资源管理和大数据处理平台: Since Dec. 2013

Linux Debugging (九) 一次生产环境下的“内存泄露”

如何解决一个valgrind和gpreftools都检查不出的”内存泄露“?

2014-11-17 20:45:47

阅读数 9686

评论数 0

Shell在大数据时代的魅力:从一道百度大数据面试题想到的点滴

对于在Linux下开发的同学来说,Shell可以说是一种基本功。 对于运维的同学来说,Shell可以说是一种必备的技能,而且应该要非常熟练的书写Shell。对于Release Team,软件配置管理的同学来说,Shell也起到了非常重要的作用。尤其是分布式系统发展的如火如荼,很多开源项目都开展的如...

2014-07-17 00:59:38

阅读数 19036

评论数 2

Linux Debugging(七): 使用反汇编理解动态库函数调用方式GOT/PLT

本文主要讲解动态库函数的地址是如何在运行时被定位的。首先介绍一下PIC和Relocatable的动态库的区别。然后讲解一下GOT和PLT的理论知识。GOT是Global Offset Table,是保存库函数地址的区域。程序运行时,库函数的地址会设置到GOT中。由于动态库的函数是在使用时才被加载,...

2014-03-06 18:46:50

阅读数 13818

评论数 2

Linux Debugging(六): 动态库注入、ltrace、strace、Valgrind

实际上,Linux的调试方法非常多,针对不同的问题,不同的场景,不同的应用,都有不同的方法。很难去概括。本篇文章主要涉及本专栏还没有涵盖,但是的确有很重要的方法。本文主要包括动态库注入调试;使用ltrace命令处理动态库的调试;使用strace调试系统调用的问题;Valgrind的简要介绍。

2014-03-06 11:20:23

阅读数 12424

评论数 2

存储那些事儿(二): 下一代Linux文件系统BTRFS简介

BTRFS,通常念成 Butter FS,Better FS 或B-tree FS。下一代的Linux文件系统。 它基于写时拷贝(copy-on-write),支持高效的snapshot和clone。它使用b-tree作为存储的数据结构。在BTRFS项目主页上对自己是这么描述的:&quo...

2014-03-03 14:26:32

阅读数 9984

评论数 1

并发编程(一): POSIX 使用互斥量和条件变量实现生产者/消费者问题

boost的mutex,condition_variable非常好用。但是在Linux上,boost实际上做的是对pthread_mutex_t和pthread_cond_t的一系列的封装。因此通过对原生态的POSIX 的mutex,cond的生成者,消费者的实现,我们可以再次体会boost带给我...

2014-02-10 19:57:05

阅读数 13627

评论数 4

Linux Debugging(五): coredump 分析入门

作为工作几年的老程序猿,肯定会遇到coredump,log severity设置的比较高,导致可用的log无法分析问题所在。 更悲剧的是,这个问题不好复现!所以现在你手头唯一的线索就是这个程序的尸体:coredump。你不得不通过它,来寻找问题根源。本文通过一个常见的coredump,逐步讲解如何...

2014-01-27 17:33:00

阅读数 28819

评论数 0

Linux Debugging(四): 使用GDB来理解C++ 对象的内存布局(多重继承,虚继承)

关于C++虚函数,很多博文从各个角度来探究虚函数是如何实现的,或者说编译器是如何实现虚函数的。本文通过GDB来从另外一个角度来理解C++ object的内存布局,一来熟悉语言背后编译器为了实现语言特性为我们做了什么;二来熟悉使用GDB来调试程序。 同时,本文也将对如何更好的理解C++语...

2014-01-27 13:53:27

阅读数 23953

评论数 0

Linux Debugging(三): C++函数调用的参数传递方法总结(通过gdb+反汇编)

上一篇文章《Linux Debugging:使用反汇编理解C++程序函数调用栈》没想到能得到那么多人的喜爱,因为那篇文章是以32位的C++普通函数(非类成员函数)为例子写的,因此只是一个特殊的例子。本文将函数调用时的参数传递方法进行一下总结。总结将为C++普通函数、类成员函数;32位和64位进行总...

2014-01-25 16:46:38

阅读数 19553

评论数 5

Linux Debugging(二): 熟悉AT&T汇编语言

没想到《Linux Debugging:使用反汇编理解C++程序函数调用栈》发表了收到了大家的欢迎。但是有网友留言说不熟悉汇编,因此本书列了汇编的基础语法。这些对于我们平时的调试应该是够用了。     本科时候大家学的基本上都是Intel的8086汇编语言,微软采用的就是这种格式的汇编。GCC采用...

2014-01-24 23:30:29

阅读数 20417

评论数 4

Linux Debugging(一): 使用反汇编理解C++程序函数调用栈

拿到CoreDump后,如果看到的地址都是????,那么基本上可以确定,程序的栈被破坏掉了。GDB也是使用函数的调用栈去还原“事故现场”的。因此理解函数调用栈,是使用GDB进行现场调试或者事后调试的基础,如果不理解调用栈,基本上也从GDB得不到什么有用的信息。本文还可以帮助你深入理解C++函数的局...

2014-01-24 17:23:50

阅读数 30683

评论数 8

Linux C 下的大文件操作

这里说的大文件指大小超过2G的文件。 小于2G的文件,用基础篇和高级篇中的函数都可以打开、读写。 大文件的打开: 在32位环境下,linux默认打开、读、写超过2G的文件会返回错误。定义如下宏可以突破这个限制,对read/write和fread/fwrite同时有效。 注意它必须定义在所有头文...

2014-01-13 16:23:44

阅读数 12015

评论数 1

Linux 共享内存 详解

一、什么是共享内存区 共享内存区是最快的可用IPC形式。它允许多个不相关的进程去访问同一部分逻辑内存。如果需要在两个运行中的进程之间传输数据,共享内存将是一种效率极高的解决方案。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传输就不再涉及内核。这样就可以减少系统调用时间,提高程序...

2014-01-13 14:27:48

阅读数 11720

评论数 0

awk 详解+实例

1. awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本...

2014-01-03 10:06:52

阅读数 12266

评论数 4

sed-加速你在Linux的文件编辑

1. Sed简介 sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使...

2014-01-03 10:01:49

阅读数 11945

评论数 3

工作中常用的Linux命令

1.从其他机器拷贝文件夹 格式: scp -r 文件夹名 用户名@机器名:/路径 范例: scp -rsearch work@zjm-testing-ps23.zjm.baidu.com:/home/work/ 2.查看哪个程序在用特定端口 格式: netstat-nap | grep 端口号 范...

2014-01-03 09:54:58

阅读数 12187

评论数 4

提示
确定要删除当前文章?
取消 删除
关闭
关闭