yum install gdb
Downloading Packages:
gdb-7.2-90.el6.i686.rpm | 2.3 MB 02:25
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : gdb-7.2-90.el6.i686 1/1
Verifying : gdb-7.2-90.el6.i686 1/1
Installed:
gdb.i686 0:7.2-90.el6
Complete!
root@bogon 20160729]# cc -g 0.c -o 0
[root@bogon 20160729]# gdb 0
####################################################################
fun()
{
int i=0;
for(;i<10;i++)
{
printf("i = %d \n",i) ;
}
}
int main()
{
fun();
return 0;
}
break 3
break fun
r
n
c
p i printf i
bt <--------------------- 查看函数堆栈
finish <--------------------- 退出函数
q quit
######################################
g++ -o m *.cpp *.h -lpthread 文件见下方
(gdb) set detach-on-fork off
(gdb) show detach-on-fork
Whether gdb will detach the child of a fork is off.
(gdb) catch fork
Catchpoint 1 (fork)
(gdb) r
Starting program: /home/sts/Desktop/20160728/m
[Thread debugging using libthread_db enabled]
[New Thread 0xb7feeb70 (LWP 11752)]
put:2
[New Thread 0xb75edb70 (LWP 11753)]
put:3
[New Thread 0xb6becb70 (LWP 11754)]
get:2
[New Thread 0xb61ebb70 (LWP 11755)]
get:0
put:5
put:7
get:0
get:0
put:9
put:11
get:0
get:2
put:3
put:5
get:0
get:0
put:7
put:9
get:0
get:0
put:11
put:3
get:2
get:0
put:5
put:7
get:0
(gdb) cont
Continuing.
put:11
put:3
get:2
get:0
put:5
put:7
get:0
get:0
^C
Program received signal SIGINT, Interrupt.
0x00110424 in __kernel_vsyscall ()
(gdb) info inferiors
Num Description Executable
* 1 process 11787 /home/sts/Desktop/20160728/m
(gdb) inferior 1
[Switching to inferior 1 [process 11787] (/home/sts/Desktop/20160728/m)]
[Switching to thread 1 (Thread 0xb7ff06d0 (LWP 11787))]
#0 0x00110424 in __kernel_vsyscall ()
(gdb)
#include <stdio.h>
#include <pthread.h>
#include <iostream>
#include <unistd.h>
using namespace std;
/* 同步关系
多生产和多消费者三种关系
加代码
生产方面 位置共用
消费方面 位置共用
*/
int ss[10];
int i=1;
int j=1;
void*s(void)
{
while(i++)
{
ss[i]=i; cout<<"put:"<<ss[i]<<endl;
sleep(2);
i=i%10+1;
}
}
void*x(void)
{
while(j++)
{
cout<<"get:"<<ss[j]<<endl; j=j%10+1;
sleep(2);
}
}
int main(void)
{
pthread_t ids1,ids2,idx1,idx2;
pthread_create(&ids1,NULL,(void* (*)(void*))s,NULL);
pthread_create(&ids2,NULL,(void* (*)(void*))s,NULL);
pthread_create(&idx1,NULL,(void* (*)(void*))x,NULL);
pthread_create(&idx2,NULL,(void* (*)(void*))x,NULL);
pthread_join(ids1,NULL);
pthread_join(ids2,NULL);
pthread_join(idx1,NULL);
pthread_join(idx2,NULL);
return (0);
}
//g++ -o m *.cpp *.h -lpthreadhttp://blog.csdn.net/pbymw8iwm/article/details/7876797
原文:http://wzsts.blog.51cto.com/10251779/1832325