gdb调试多线程与多进程
来源:互联网 发布:刷牙最佳时间知乎 编辑:程序博客网 时间:2024/06/07 23:33
gdb基本命令
gdb调试多进程
调试多进程程序时gdb默认调试主进程,gdb支持同时调试多个进程,只需要设置follow-fork-mode(默认为parent)和detach-on-fork(默认为on)即可。我们还可以使用catch fork指令,如果fork异常,会停止程序。
可以用 set 设置、show 查看当前状态
测试用例:
#include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<unistd.h> int main() { pid_t pid = fork(); if(pid == 0) { printf("i am child! pid = %d, ppid = %d\n",getpid(),getppid()); } else { printf("i am father! pid = %d, ppid = %d\n",getpid(),getppid()); } return 0; }
开始调试
设置为只调试父进程,子进程阻塞式等待。设置方法在表二中说明。
设置为先调试父进程,子进程阻塞式等待。调试完父进程之后切换到子进程再次调试。
gdb调试多线程
测试用例:
#include<stdio.h> #include<pthread.h> #include<sys/types.h> void* thread1(void* arg) { printf("thread1 running pid = %d, tid = %u\n", getpid(),pthread_self()); pthread_exit((void*)1); } void* thread2(void* arg) { printf("thread2 running pid = %d, tid = %u\n", getpid(),pthread_self()); return (void*2; } int main() { pthread_t p1,p2; pthread_create(&p1, NULL, &thread1, NULL); pthread_create(&p2, NULL, &thread2, NULL); pthread_cancel(p2); void* ret1=NULL; void* ret2=NULL; pthread_join(p1, &ret1); pthread_join(p2, &ret2); printf("thread1 ret = %d\n", ret1); printf("thread2 ret = %d\n", ret2); return 0; }
开始调试
设置core文件
core的意思是核心,dumped的意思就是抛出,转储,core dumped就是核心转储的意思。当一个进程异常退出前,该进程会抛出当时该程序进程的内存详细情况存储在硬盘上,文件名通常是core,这就叫core dump。
进程异常终止通常是因为代码存在BUG,比如非法内存访问导致段错误,事后可以用调试器检查core文件以查清错误原因,这叫做事后调试。
阅读全文
0 0
- gdb调试多进程与多线程
- GDB调试-多进程与多线程程序
- gdb调试多进程与多线程
- gdb调试多进程与多线程
- gdb调试多进程与多线程
- 使用gdb调试多线程与多进程
- gdb调试多线程与多进程
- GDB调试多进程、多线程
- gdb多进程多线程调试
- gdb 多进程,多线程调试
- GDB多进程多线程调试
- gdb调试多线程多进程
- gdb调试多进程,多线程
- gdb调试多进程多线程
- gdb调试多进程多线程
- gdb调试多进程多线程
- gdb调试多进程、多线程
- gdb调试多进程多线程
- 深入理解JVM(四)——各个版本提供的垃圾收集器
- UEFI下安装系统
- jquery擦除效果(刮刮乐)
- MFC实现连连看四:滚动条的使用
- erlang中的record
- gdb调试多线程与多进程
- python小练习七——支持多用户在线的FTP程序
- 机器学习笔记--朴素贝叶斯法
- H5调用本地app
- IA32处理器任务切换过程 学习总结
- 4195: [Noi2015]程序自动分析
- hdu 1072 Nightmare(BFS+回头路)
- jsonp和xml格式生成与调用
- C、C++指针、数组和内存分配