一种定位内存泄露的方法(Linux)
目的:
本文是《一种定位内存泄露的方法(Solaris)》对应的Linux版本,调试器使用gdb。主要介绍实例部分。其他请见《一种定位内存泄露的方法(Solaris)》。
实例:
模拟new失败的程序:
#include <stdexcept>
class ABC
{
public:
virtual ~ABC(){}
int i;
int j;
};
void f()
{
for (int i = 0; i < 1000; ++i)
{
ABC* p = new ABC;
}
throw std::bad_alloc();
}
int main()
{
f();
return 0;
}
1) 编译运行此段代码。产生一个core文件
2) 用gdb打开这个core文件:
gdb a.out core
(gdb) run
Starting program: /test/new_fail/a.out
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Program received signal SIGABRT, Aborted.
0x00007ffff733f645 in raise () from /lib64/libc.so.6
(gdb) info proc
process 10683
cmdline = '/test/new_fail/a.out'
cwd = '/test/new_fail'
exe = '/test/new_fail/a.out'
(gdb) shell pmap 10683
10683: a.out
START SIZE RSS PSS DIRTY SWAP PERM MAPPING
0000000000400000 4K 4K 4K 0K 0K r-xp /test/new_fail/a.out
0000000000600000 4K 4K 4K 4K 0K r--
相关文档:
GPIO(General Purpose Input/Output的缩写)就是芯片的引脚,引脚是可编程的可对引脚的工作模式进行设置:输入模式(检测输入信号),输出模式(输出0或1),高阻状态(常用于AD转换),还有禁止或允许上内部下拉电阻(上拉:管脚通过电阻接高电平,下拉:管脚通过电阻接地,也可以外部接上拉或下拉电阻),还有管脚复用等功能, ......
窗体顶端
索引:
1.fork、exec和exit对IPC对象的影响
2.fcntl记录锁
3.管道和FIFO的属性
4.管道和FIFO的限制
5.pipe函数
6.popen和pclose
7.mkfifo函数
8.System V IPC共性描述
9.msqid_ds结构
10.msgget函数
11.msgsnd函数
12.msgrcv函数
13.msgctl函数
14.在System V消息队列上使用select和poll
15.sem ......
一. 什么是信号量
信号量(Semaphore)-- 相当一个信号灯,程序里是一个非负整数,表示状态.
可以用来保护两个或多个关键代码段,这些关键代码段不能并发调用。在进入一个关键代码段之前,线程必须获取一个信号量。
如果关键代码段中没有任何线程,那么线程会立即进入该框图中的那个部分。一旦该关键代码段完成了,那么该 ......
共享内存:
使用共享内存和使用malloc()来分配内存区域很相似。使用共享内存的方法是:
1 对一个进程/线程使用shmget()分配内存区域。
2 使用shmat()放置一个或多个进程/线程在共享内存中,也可以用shmctl()来获取信息或者控制共享区域。
3 使用shmdt()从共享 ......
经常需要Kill多个进程,这些进程包含共同的关键字,可以用一条命令Kill掉它们。 ps aux | grep "common" | cut –c 9-15 | xargs kill –9 管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。下面说说用管道符联接起来的几个命令: "ps aux" 查看所有进程的命令。这时检索出的 ......