我在程序中用createporcess 生成了一个子进程(dos程序,exe文件),并对其输入输出进行了重定向(运行正常);又想得到子进程的异常(被0除等),就选择了对子进程进行调试得方法(不知道别的方法),运行正常。
   但将2者一块用,就不成了,请问在对子进程进行调试时,不能进行输入输出重定向吗?要想实现这些功能,该怎么办呢?

解决方案 »

  1.   

    就是用createpipe生成管道,将createprocess生成的子进程的输入输出重定向,createprocess得生成标志dwCreationFlags设为null;如果将dwCreationFlags设置成debug_process,就是对进程调试了,用WaitForDebugEvent等待调试异常的发生,此时对子进程的输入输出重定向就不行了,程序就死在那里了。
      

  2.   

    试试下面的方法:
    在你想要调试的子程序的代码中加入一句代码DebugBreak();
    然后重新编译你的子程序的调试版本。现在调试主程序,
    子程序的调试版本在运行的过程中,当执行到DebugBreak()时,将会抛出一个异常,
    这个异常会由操作系统捕捉到,然后弹出一个对话框,说程序遇到了问题,问你要不要发送错误报告,点击该对话框的调试按钮,系统又会弹出一个对话框,选择相应的调试器进行调试,然后子进程就会中断在代码DebugBreak()处,接下来就可以正常调试了
      

  3.   

    您说的方法可能不行,我倒是可以在子程序中加入代码DebugBreak(),但要求是程序自动调试子进程,且输入也是从数据库或文件中读取,也就是不需要人的干预,一切自动化。
      

  4.   

    我调试的时候重定向了stderr,通过它向主进程传送错误消息
      

  5.   

    linur 能说的具体一些吗?
      有没有不进行调试而得到子进程异常的方法?
      

  6.   

    比如A创建了进程B,但希望在非调试运行的时候B有可能出现像被0除这样的错误,A要知道B的异常?我的想法是A要知道这样的错误那就要求B必须要报告这个错误,而B报告错误的方法那就多了,用进程间消息通信都可以,你的意思是不是在说B在异常退出并不报告这个错误,而A也能感知到B退出了?
      

  7.   

    我的意思是说B在发生时异常时将错误报告给A,且B退出.
      

  8.   

    用消息来报告,比如B异常时就发消息给A,A就应该知道B异常了,这个方法不行么?