linux下多进程的调试

linux下多进程的调试:

(1)follow-fork-mode

set follow-fork-mode [parent | child] ———— fork之后选择调试父进程还是子进程

(parent: fork之后继续调试父进程;child: fork之后调试父进程。默认的是fork之后调试父进程)

set detach-on-fork [on | off] ———— 指示gdb在fork之后是否断开某个进程的调试,或交由gdb控制

(on: 断开调试follow-fork-mode指定的进程;off: gdb将控制父进程和子进程,follow-fork-mode指定的进程将被调试,另一个进程置于暂停状态)

(2)attach pid

ubuntu下gdb要使用attach pid权限是不够的,需要切换到root,或者你可以sudo chmod +s /usr/bin/gdb给gdb添加权限。

使用attach需要在父子进程代码最开始添加sleep()语句,让进程睡眠,之后在后台运行进程,通过ps获取子进程pid,最后attach pid进入调试子进程。

eg:

$./test &            //使进程test在后台运行

$ps -ef | grep test        //查看进程pid

结果中类似下面的形式:

XXX 12345 23456 ———————————————— ./test        //父进程

XXX 12346 12345 ———————————————— ./test         //子进程,这里的第一个数字就是子进程pid

$ gdb -q test

(gdb)attach 12346         //attach到子进程

添加的sleep()可以是类似这样的语句:

while(pause)        //pause是一个标志变量

sleep(1);

在gdb调试时你只需要set pause=0使条件不满足即可执行后续代码。

(3)gdb wrapper

当父进程fork出子进程,子进程会紧接着调用exec函数来执行新的代码,这时也可以用gdb wrapper。它的优点是不用添加额外代码。

linux下将一个进程放到后台运行:

(1)./test &

(2)"./test" 之后按下 "ctrl+z" , 用"bg %num"返回的数字将该进程放到后台;

linux下将进程拉回前台:

用"fg %num"

linux下多进程的调试

时间: 2024-08-27 06:38:26

linux下多进程的调试的相关文章

Linux下的反调试技术

Linux下的反调试技术 2014年01月30日 ⁄ 综合 ⁄ 共 2669字 ⁄ 字号 小 中 大 ⁄ 评论关闭 转自  http://wangcong.org/blog/archives/310 如何防止自己的程序被调试器跟踪,这是一个很有趣的话题,也是反逆向工程中的一个重要话题.这里简单介绍一下Linux平台上的反调试技术. (本文主要参考:http://blog.txipinet.com/2006/10/05/37-tecnicas-anti-debugging-sencillas-pa

linux下多进程的文件拷贝与进程相关的一些基础知识

之前实现了用文件IO的方式可以实现文件的拷贝,那么对于进程而言,我们是否也可以实现呢? 答案是肯定的. 进程资源: 首先我们先回顾一下,进程的运行需要哪些资源呢?其资源包括CPU资源,内存资源,当然还有时间片资源,我们都知道进程是有 栈, 堆,  只读数据段,  数据段(已初始化的全局变量静态变量),bss段(未初始化的),   代码段还有一组寄存器值. 进程命令: 另外我们也可以通过 ps  -ef |grep 进程名命令来查看进程号(PID)和父进程号(PPID),之后还可以通过 ps au

Linux下用Xdebug调试php

Linux下用Xdebug调试php 博客分类: php PHPLinuxZendEclipseC# 为了调试PHP程序,安装一下xdebug. 官方网址: http://www.xdebug.org 首先下载xdebug2.1.0,在官方首页下载源代码,下载回来的文件名是:xdebug-2.1.0.tgz xdebug的版本需与您的php版本相对应,由于偶的php是5.3.2,所以下载xdebug2.1.0 Xml代码 收藏代码 cd /your/download/path tar zxvf

linux下多线程的调试

多线程调试的基本命令(均在gdb命令行使用): info threads ---- 显示当前可调试的所有线程.每一个线程都有自己的线程ID,显示结果中前面有*的表示当前调试的线程. eg: (gdb)info threads ID    Target ID 3     Thread 0x------(LWP 1235) 2    Thread 0x------(LWP 1234) *1    Thread 0x------(LWP 1233)    //当前活动的线程 最前面的数字1.2.3表示

Linux下多进程服务端客户端模型一(单进程与多进程模型)

本文将会简单介绍Linux下如何利用C库函数与系统调用编写一个完整的.初级可用的C-S模型. 一.基本模型: 1.1   首先服务器调用socket()函数建立一个套接字,然后bind()端口,开始listen()监听,此时,套接字变成了被动的套接字,用于侦听客户端的请求.然后accept(),开始阻塞监听客户端的请求. 1.2   客户端以服务端的参数为参数,用socket()建立套接字,然后connect()连接服务端. 1.3  服务端收到连接请求,accept()返回一个标识符,继续执行

Linux下性能测量和调试诊断工具Systemtap

一.简介 SystemTap是一个诊断Linux系统性能或功能问题的开源软件.它使得对运行时的Linux系统进行诊断调式变得更容易.更简单.有了它,开发者或调试人员不再需要重编译.安装新内核.重启动等烦人的步骤. 为了诊断系统问题或性能,开发者或调试人员只需要写一些脚本,然后通过SystemTap提供的命令行接口就可以对正在运行的内核进行诊断调试,以前需要的修改或插入调试代码.重新编译内核.安装内核和重启动等这些琐碎的工作完全消除.目前该工具并不支持对用户态应用的诊断调试,但是它们在以后会被添加

在Linux下开发和调试STM32

因为最近需要做一些STM32的开发,而我大部分的其他开发都在Linux上,经常在Windows和Linux下切换感觉比较不方便,于是就研究了一下Linux下开发STM32的工具,顺便在这边做下记录. 使用的开发工具 软件平台: Eclipse Luna 下载:https://eclipse.org/downloads/packages/release/luna/sr2 用于安装System Workbench for STM32插件,建议下载Eclipse IDE for C/C++ Devel

linux下core文件调试方法(转载)

转自于:http://blog.csdn.net/fcryuuhou/article/details/8507775 在程序遇到段错误不寻常退出时,一般是访问内存出错.但是不会给出程序哪里出现的问题,这个时候就需要core文件来帮助调试. 内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息).使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数. 1.core文件的生成开关和大小限制 1)使用ulimit -c命令可查看core文件的生成开关.若结果

Linux下使用GDB调试应用程序示例

GDB概述 ---- GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓"寸有所长,尺有所短"就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. 2.可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式)