tinycc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Tinycc-devel] Testing Console Application with CreateProcess


From: grischka
Subject: Re: [Tinycc-devel] Testing Console Application with CreateProcess
Date: Sun, 22 Jan 2012 14:27:09 +0100
User-agent: Thunderbird 2.0.0.24 (Windows/20100228)

address@hidden wrote:
I'm writing a small app to do automated testing of a console application. It
needs to repeatedly run the app with various options and handle when the app
being tested crashes. I started with system(), moved on to spawn() and have
since been trying CreateProcess(). It starts the app correctly but I can't
seem to kill the process. How do I kill the process or is there a different
approach I should consider?

Greg

There are some things wrong with the code below but there is one
thing that tcc better should notice but currently does not:

    retCode = ExitProcess(pi.dwProcessId);

which is declared as

    VOID ExitProcess(UINT uExitCode);

(and actually never returns).

Anyone wants to fix that?

--- grischka


#include <windows.h>
#include <stdio.h>

int main(void) {

  int retCode = 0;
  PROCESS_INFORMATION pi;        /* filled in by CreateProcess */
  STARTUPINFO si;                /* startup info for the new process */

  /* print out our process ID */
  printf("Process %d reporting for duty\n",GetCurrentProcessId());

  /* Get startup info for current process, we will use this
     as the startup info for the new process as well... */
  GetStartupInfo(&si);

  /* Call CreateProcess, telling it to run DivideByZero
     with lots of defaults... (the NULLs mean "use defaults")
  */

  CreateProcess(NULL,          /* lpApplicationName */
                "DivideByZero.exe", /* lpCommandLine */
                NULL,          /* lpsaProcess */
                NULL,          /* lpsaThread */
                FALSE,         /* bInheritHandles */
                DETACHED_PROCESS, /* dwCreationFlags */
                NULL,          /* lpEnvironment */
                NULL,          /* lpCurDir */
                &si,           /* lpStartupInfo */
                &pi            /* lpProcInfo */
                );


  printf("New Process ID: %d\n",pi.dwProcessId);

  getc(stdin); //Pause here to check task manager etc...

  retCode = ExitProcess(pi.dwProcessId);

  printf("Returned %d\n\n",retCode);

  return(0);
}


//DivideByZero

#include <stdio.h>

int main(void)
{
        int result = 0;

        printf("DivideByZero is about to crash\n");

        result = 42/result;

        printf("Result: %d\n", result);

    return(0);
}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]