gdb调试 fork程序 设置跟踪
来源:互联网 发布:java 架构师 高并发 编辑:程序博客网 时间:2024/06/16 16:28
使用gdb调试的时候,gdb只能跟踪一个进程。
可以在fork函数调用之前,通过指令设置gdb调试工具跟踪父进程或子进程。
默认情况下gdb是跟踪父进程的。
set follow-fork-mode child命令设置gdb在fork之后跟踪子进程。
set follow-fork-mode parent设置跟踪父进程。
注意:一定要在fork函数调用之前设置。
程序测试:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
pid_t pid;
printf("你是我的削苹果\n");
pid = fork();
if(pid==-1){
perror("fork error");
exit(1);
}else if(pid == 0){
printf("child is here. pid = %u,ppid = %u\n", getpid(), getppid());
}else{
printf("parent is here. pid = %u,ppid = %u\n", getpid(), getppid());
sleep(1);
}
return 0;
}
编译、调试:
yu@ubuntu:~/cplusplus/fork创建进程$ gcc fork.c -o fork -g
yu@ubuntu:~/cplusplus/fork创建进程$ gdb fork
开始调试,设置跟踪子进程:
(gdb)set follow-fork-mode child
(gdb)start
Temporarybreakpoint 1 at 0x40071f: file fork.c, line 7.
Starting program: /home/yu/cplusplus/fork创建进程/fork
Temporary breakpoint 1, main () at fork.c:7
7 printf("你是我的削苹果\n");
(gdb)n
你是我的削苹果
9 pid = fork();
(gdb)n
parentis here. pid = 2170, ppid = 2168
[Newprocess 2174]
[Switching to process 2174] //此处已经转向跟踪子进程程序
main() at fork.c:10
10 if(pid==-1){
(gdb)n
13 }else if(pid == 0){
(gdb)n
14 printf("child is here. pid = %u,ppid = %u\n", getpid(), getppid());
(gdb)c
Continuing.
child is here. pid = 2174, ppid = 1
[Inferior2 (process 2174) exited normally]
- gdb调试 fork程序 设置跟踪
- gdb调试有fork的程序
- gdb调试有fork的程序
- gdb 跟踪调试
- GDB跟踪调试
- Linux下gdb调试程序之堆栈跟踪
- gdb fork进程,多线程调试
- gdb调试fork多进程
- gdb fork 多进程调试
- gdb调试之堆栈跟踪
- gdb调试之堆栈跟踪
- gdb 跟踪调试命令整理
- gdb 跟踪调试命令整理
- gdb 跟踪调试命令整理
- gdb调试跟踪多进程
- 关于程序跟踪调试
- GDB调试多进程的fork+exec
- gdb 调试c程序 (2) 设置breakpoint 和 watchpoint
- 研究structs2中的控制流程
- Map集合的相关操作
- VS2012 格式化(自动对齐)快捷键-助记
- Linux常用命令-yum
- C++ 多继承构造函数初始化列表调用顺序
- gdb调试 fork程序 设置跟踪
- 关于安卓7.0有些控件不能用(待完善)
- Top 16 Java 应用类 - 这些功能再也不用自己写了
- 自学Lua(一):lua的介绍、下载和编写hello world
- java容器类总结
- java中存在i+1<i的情况吗?
- [循环打印]数组套数组
- 简单选择排序
- maven命令使用