精华内容
下载资源
问答
  • 多进程调试

    千次阅读 2018-12-31 12:17:32
    一、dnspy 多进程调试  1.1 当子进程起来后,另外起dnpsy使用附加的方式,可以进入调试。 这样做是可以调试,但是这样看手速... 如果你附加过慢,可能关键函数已经跳过了;最主要的问题是如果使用dnspy的附加...

    在逆向过程中,往往碰到多进程的调试情况,这个时候该如何处理呢?

    一、dnspy 多进程调试

        1.1  当子进程起来后,另外起dnpsy使用附加的方式,可以进入调试。

    这样做是可以调试,但是这样看手速... 如果你附加过慢,可能关键函数已经跳过了;最主要的问题是如果使用dnspy的附加功能,很多函数的局部变量显示不出值,提示:进程不安全;这时,我们应该选择方式1.2。

     

        1.2  dnspyA启动调试主进程,到起进程ProcessStart处断下来,这时可以见到,第一个参数是子进程名,第二个参数是启动参数;     我们再启动一个dnspyB,按照这个启动参数启动,子进程即可;

        注意:启动参数需要修改:去掉头尾的字符串,"""" 改为 "" , \  改为 \\ ;

     

    二、OD的多进程调试

       其实和dnspy的差不多。

     

    展开全文
  • GDB多进程调试

    千次阅读 2017-03-03 10:57:41
    多进程调试命令: 1、默认设置下,在调试多进程程序时GDB只会调试主进程。但是设置follow-fork-mode的话,就可调试多个进程。 set follow-fork-mode parent|child: 进入gdb后默认调试的是parent,要想调试child的...

    多进程调试命令:
    1、默认设置下,在调试多进程程序时GDB只会调试主进程。但是设置follow-fork-mode的话,就可调试多个进程。
    set follow-fork-mode parent|child:
    进入gdb后默认调试的是parent,要想调试child的话,需要设置set follow-fork-mode child,然后进入调试。当然这种方式只能同时调试一个进程。
    show follow-fork-mode:查看当前调试的fork的模式。

    2、detach-on-fork on|off:
    设置为on的话,只调试父进程或子进程其中一个,需要根据follow-fork-mode决定,这是默认模式。
    设置成off的话,父子进程都在gdb的控制之下,其中一个进程正常调试,需要根据follow-fork-mode决定,另一个进程会被设置为暂停状态。
    show detach-on-fork:查看detach-on-fork的模式。

    扩展:GDB将每一个被调试程序的执行状态记录在一个名为inferior的结构中。一般情况下一个inferior对应一个进程,每个不同的inferior有不同的地址空间。inferior有时候会在进程没有启动的时候就存在。

    3、info inferiors:显示GDB调试的所有inferior,GDB会为他们分配ID。其中带有*的进程是正在调试的inferior.

    4、inferior num:切换到ID是num的inferior进行调试。

    5、add-inferior [-copies n] [-exec executable]:
    增加n个inferior并执行程序为executable。如果不指定n只增加一个inferior。如果不指定executable,则执行程序留空,增加后可使用file命令重新指定执行程序。这时候创建的inferior其关联的进程并没启动。

    6、clone-inferior [-copies n] [infno]:
    复制n个编号是infno的inferior。如果不指定n的话,就只复制一个inferior。如果不指定infno,则就复制正在调试的inferior。

    7、 detach inferior infno:
    detach掉编号是infno的inferior。注意这个inferior还存在,可以再次用run命令执行它。

    8、kill inferior infno:
    kill掉infno号inferior。注意这个inferior仍然存在,可以再次用run等命令执行它。

    9、remove-inferior infno:
    删除一个infno号的inferior。如果inferior正在运行,则不能删除,所以删除前需要先kill或者detach这个inferior。

    10、set schedule-multiple on|off:
    设为off:只有当前inferior会执行。
    设为on:全部是执行状态的inferior都会执行。
    这个选项类似于多线程调试里的set scheduler-locking选项
    注意:如果scheduler-locking是指为on,即使schedule-multiple设置为on,也只有当前进程的当前线程会执行。

    show schedule-multiple:
    查看schedule-multiple的状态。

    11、set follow-exec-mode new|same:
    设置same:当发生exec的时候,在执行exec的inferior上控制子进程。
    设置为new:新建一个inferior给执行起来的子进程。而父进程的inferior仍然保留,当前保留的inferior的程序状态是没有执行。
    show follow-exec-mode:查看follow-exec-mode设置的模式。

    12、set print inferior-events on|off:用来打开和关闭inferior状态的提示信息。
    show print inferior-events :查看print inferior-events设置的状态。

    13、maint info program-spaces:
    用来显示当前GDB一共管理了多少地址空间。

    示例:

    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    #include<sys/types.h>
    int main()
    {
        printf("this is one\n");
        pid_t id=fork();
        printf("this is tow\n");
        if(id==0)
        {
            printf("this is child\n:%d  ppid:%d\n",getpid(),getppid());
            exit(1);
        }
        else
        {
            sleep(1);
            printf("this is father:%d\n",getpid());
            waitpid(-1,NULL,0);
        }
    
        return 0;
    }

    1、设置调试的模式
    这里写图片描述

    2、切换调试的进程
    这里写图片描述
    注意:带有*的进程是当前正在调试的进程

    展开全文
  • Android 多进程调试技巧

    千次阅读 2019-07-16 13:54:07
    之前开发多进程的应用,想要调试Application 里面的代码,一直调试不了代码。 因为是多进程,Application 会执行两次。 原因: 比如我们有两个进程,一个叫进程a, 一个叫进程b. 因为我们android debug 的时候,选择...

    之前开发多进程的应用,想要调试Application 里面的代码,一直调试不了代码。
    因为是多进程,Application 会执行两次。

    原因:

    在这里插入图片描述
    比如我们有两个进程,一个叫进程a, 一个叫进程b.
    因为我们android debug 的时候,选择的是attch debug for process,只能选一个进程。我们选择了进程a, 所以, 你只能收到一开始的时候的Application执行。进程b 的你是收不到断点的。因为不是一个进程。

    解决方法:

    在你的application onCreate 里面,加上下面这句,保证各种进程都会等着你调试!

                    Debug.waitForDebugger();
    
    

    总结:

    1.之前觉得这句话很废物,没什么用,没想到果然是很有用。尤其是多进程的时候。
    2. 如果解决一些黑屏的问题,我们可以在一些地方加上这句话,判断是在这个代码之前黑屏还是在这个代码之后黑屏。这句话对调试查问题,很有帮助。

    展开全文
  • windbg与多进程调试

    千次阅读 2011-08-14 08:54:38
    我们首先做个实验,来看windbg是否支持多进程调试, 我首先编写一个MFC工程命名为mutiprocess,在这个工程中简单添加一个按钮,作用是启动一个线程。代码如下:  // TODO: Add your control notification handler ...

    我们首先做个实验,来看windbg是否支持多进程调试, 我首先编写一个MFC工程命名为mutiprocess,在这个工程中简单添加一个按钮,作用是启动一个线程。代码如下:

     // TODO: Add your control notification handler code here
     STARTUPINFO           StartupInfo;

     PROCESS_INFORMATION pi; //Define as global variable, the pi must be transmited to DbgMainLoop(DWORD)

     memset ( &StartupInfo , NULL , sizeof ( STARTUPINFO ) ) ;
     memset ( &pi , NULL , sizeof ( PROCESS_INFORMATION ) ) ;

     StartupInfo.cb = sizeof ( STARTUPINFO ) ;

     //create the Debuggee process
     CreateProcess(
       0,
       "D:\\C++\\debugviewTest\\Debug\\debugviewTest.exe",
       (LPSECURITY_ATTRIBUTES) 0L,
       (LPSECURITY_ATTRIBUTES) 0L,
       TRUE,
        NORMAL_PRIORITY_CLASS,
       (LPVOID) 0L,
       (LPTSTR) 0L,
       &StartupInfo, &pi ) ;

    然后进行编译,通过后启动windbg,选择“Open Executable”,选择编译成功的mutiprocess.exe,当进入到初始化断点后直接键入‘g’。接下来mutiprocess.exe启动。当点

    对画框中的button后将启动进程“debugviewTest.exe”,debugviewTest.exe是个被调试进程其中的功能包括breakpoint,trace,Create thread, remote break point。然后尝试点击break point, trace, create thread等按钮,发现在windbg没有任何显示。

    接下来在mutiprocess的按钮上添加一行代码“DebugBreak();”,手动添加一个断点,然后重复以上测试,但debugviewTest.exe启动后,mutiprocess被中断到调试器,此时尝试点击break point,trace,create thread等按钮,仍然发现在windbg中没有任何显示。

    于是可以得出windbg不支持多进程的调试。但从windbg的调试结构上看,windbg完全可以支持多进程的调试,但为什么没有实现这个功能呢?我一直思考但没有得出结论,但我觉得多进程调试还是有其方便之处,下篇中我将介绍如何能够实现多进程调试以及其优点。

    展开全文
  • 首先创建的进程肯定有一个入口点,...那么肯定也有办法,例如CEF库,多进程的浏览器,启动的时候,也是创建多个进程,这些进程的入口肯定是内部无法更改的,但是CEF,大神说提供了调试的参数,再入口添加参数,就...
  • 最近用vs2010调试 android adb 代码, 该代码是由一个客户端来fork一个子进程(见adb.cpp中 launch_server函数,)创建server。 那么问题来了,当代码进入子进程后,怎么调试呢? 用过网上说的DebugBreak()函数,...
  • 最近使用多进程时,子进程中程序一直卡在某一步,然后就没有继续执行,原以为是多进程间互相干扰,最后发现是子进程报错了,而子进程不做任何处理,报错的时候,报错信息是不会打印的,因为一直找不到原因。...
  • vs2010 多进程 调试

    千次阅读 2015-10-30 11:49:32
    有两个进程A、B,在进程A中启动进程B,并通过命令行向进程B传递参数,如何对进程B进行跟踪调试? 推荐方法: 1. 在B函数入口调用AfxMessageBox函数,当进程一旦进入这个函数就挂起,然后在VS2005里点击调试菜单...
  • fork 多进程调试

    千次阅读 2015-06-11 17:04:31
    fork多进程调试一般有一下3种方法: 1. follow-fork-mode 用法: set follow-fork-mode [parent|child]   进入gdb后,直接设置,默认是parent 所以如果想要调试子进程,进入gdb后设置 ...
  • Chrome多进程调试

    千次阅读 2012-12-26 11:38:33
    Chrome的多进程模型给DEBUG带来了很大的挑战。 一、如果你设置代码的断点,默认情况下,VS只会跟踪那些在主进程Browser代码中的那些断点。VS提供了"Attach To Process"的方法。比如当Render Process启动之后,...
  • gdb多进程调试示例

    千次阅读 2009-09-01 22:18:00
    http://bigwhite.blogbus.com/logs/1801699.html众所周知,GDB是Unix/...最近一个项目中的问题让我接触如何使用GDB调试多进程程序,更确切的是说调试调用fork的多进程程序。使用GDB最好的文档就是其名为Debugging with
  • gdb 多进程调试

    千次阅读 2011-03-04 19:54:00
    用gdb调试多进程的程序会遇到困难,gdb只能跟踪一个进程(默认是跟踪父进程),而不能同时跟踪多个进程,但可以设置gdb在fork之后跟踪父进程还是子进程。以下面的程序为例: 2 #include 3 #include 4 #include ...
  • aidl ( 二) 多进程调试

    千次阅读 2015-05-14 18:40:46
    在上篇文章http://blog.csdn.net/litefish/article/details/45697229的基础上,介绍下aidl的调试 1、在AidlClient中打断点 2、在AidlServer中打断点 3、AidlServer模块debug运行起来,AidlClietn模块debug...
  • Chrome的多进程模型给DEBUG带来了很大的挑战。这篇文章尝试着解释如何在VS中调试Chrome的子进程。 如果你设置代码的断点,默认情况下,VS只会跟踪那些在主进程Browser代码中的那些断点。VS提供了"Attach To Process...
  • LINUX 下多进程调试方法

    千次阅读 2007-05-16 21:08:00
    运行gdb进行调试这个程序,等到子进程被fork后,得到它的进程号,然后在另外一个终端运行gdb,用这个进程号attach上这个子进程,我们就可以调试进程了。 gdb childID (gdb) attach childID 2:另外一种...
  • Linux gdb多进程、多线程调试

    千次阅读 2020-05-21 17:00:45
    gdb多进程调试 gdb多线程调试 前言 gdb 是linux平台下进行程序调试的最常用的工具。简单的程序调试就是加断点,然后一步一步让程序运行,直到找到 bug 。一般的程序调试起来比较简单,但是在多进程或多线程情况下...
  • 2.1:多进程调试 3.线程查看 4.线程调试 4.1:进入gdb调试中 4.2:查看线程信息 4.3:设置断点,并执行线程3的函数,指行完毕继续运行到断点处 4.4:只运行当前线程 4.5:所有线程同步执行 1.进程查看...
  • Gdb调试多进程程序

    2014-06-06 10:39:51
    转载 ... Gdb调试多进程程序 ...多进程程序有自己独立的地址空间,这是多进程调试首要注意的地方。Gdb功能强大,对调试多线程提供很多支持。 方法1:调试多进程最土的办法:attach pid Attach是调试进
  • 多进程调试:首先来了解下会可能会用到的调试命令: 1.默认设置下,在调试多进程程序时GDB只会调试主进程。 但是如果设置follow-fork-mode的话,就可调试多个进程。 set follow-fork-mode parent|child: 进入...
  • gdb多进程/多线程调试实战

    千次阅读 2017-07-27 11:49:45
    # **gdb多进程调试** - set follow-fork-mode [parent|child] set detach-on-fork [on|off] |follow-fork-mode | detach-on-fork | 说明 | --------------- |:---------------:| -----| |parent | on
  • 下图为多线程与多进程调试的通用常用命令,应该熟练掌握下面几种命令的使用。 gdb调试多线程 多线程调试的主要任务是准确及时地捕捉被调试程序线程状态的变化的事件,并且GDB针对根据捕捉到的事件做出相应的操作,...
  • 关于gdb调试多进程很早之前就看过,但一直没有总结很深入的学习,今天又碰到这个问题了,记录下 记得kk跟我说过,在开发程序的时候尽量少调试,尽量少使用gdb等调试工具,尽量多的使用log等方式来定位错误,这样会...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 259,283
精华内容 103,713
关键字:

多进程调试