学习啦>学习电脑>操作系统>Linux教程>

linux如何调试多进程程序

时间: 孙胜652由 分享

  在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多进程程序调试的方法介绍了,多进程的调试我们通常使用的是gdb,当你在调试的时候多少都会用到gdb调试工具。

精彩文章

    IIS 10.0 详细错误 - 500.0 - Internal Server Error

    HTTP 错误 500.0 - Internal Server Error

    FastCGI 进程最近常常失败。请过一会再尝试此请求

    最可能的原因:

    • IIS 收到了请求;但在处理请求过程中出现内部错误。此错误的根本原因取决于处理该请求的是哪一个模块以及出现此错误时工作进程中出现了何种情况。
    • IIS 无法访问网站或应用程序的 web.config 文件。如果 NTFS 权限设置不正确,便会出现这种情况。
    • IIS 无法处理网站或应用程序的配置。
    • 已经过身份验证的用户没有使用此 DLL 的权限。
    • 该请求将被映射到托管处理程序,但不会安装 .NET 可扩展功能。

    可尝试的操作:

    • 确保 web.config 文件的 NTFS 权限正确,并允许访问 Web 服务器的计算机帐户。
    • 检查事件日志中是否记录了任何附加信息。
    • 确认 DLL 的权限。
    • 如果请求被映射到托管处理程序,则安装 .NET 可扩展功能。
    • 创建跟踪规则以跟踪此 HTTP 状态代码的失败的请求。有关为失败的请求创建跟踪规则的详细信息,请单击此处。

    详细错误信息:

    模块   FastCgiModule
    通知   ExecuteRequestHandler
    处理程序   php-8.2.12
    错误代码   0x80004005
    请求的 URL   http://xiaobai.credit189.com:80/linappauto/seo_art_list.php
    物理路径   D:\Web\credit189xiaobai\linappauto\seo_art_list.php
    登录方法   匿名
    登录用户   匿名

    详细信息:

    此错误表明在处理请求时出现问题。Web 服务器收到了请求,但在处理过程中出现错误,导致 500 错误。

    查看详细信息 »

    Microsoft 知识库文章:

    • 294807
316055