Index: strace.cc =================================================================== RCS file: /cvs/uberbaum/winsup/utils/strace.cc,v retrieving revision 1.11 diff -u -p -2 -r1.11 strace.cc --- strace.cc 2001/03/05 17:55:23 1.11 +++ strace.cc 2001/11/03 20:26:36 @@ -17,4 +17,5 @@ details. */ #include #include +#include #include #include @@ -37,4 +38,6 @@ static int delta = 1; static int hhmmss = 0; static int bufsize = 0; +static int new_window = 0; +static long flush_period = 0; static BOOL close_handle (HANDLE h, DWORD ok); @@ -265,6 +268,6 @@ create_child (char **argv) flags = forkdebug ? 0 : DEBUG_ONLY_THIS_PROCESS; - flags |= - /*CREATE_NEW_PROCESS_GROUP | */ CREATE_DEFAULT_ERROR_MODE | DEBUG_PROCESS; + flags |= CREATE_DEFAULT_ERROR_MODE | DEBUG_PROCESS; + flags |= (new_window ? CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP : 0); make_command_line (one_line, argv); @@ -525,9 +528,20 @@ proc_child (unsigned mask, FILE *ofile) DEBUG_EVENT ev; int processes = 0; + time_t cur_time, last_time; + SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_HIGHEST); + last_time = time (NULL); while (1) { BOOL debug_event = WaitForDebugEvent (&ev, 1000); DWORD status = DBG_CONTINUE; + + if (bufsize && flush_period > 0 && + (cur_time = time (NULL)) >= last_time + flush_period) + { + last_time = cur_time; + fflush (ofile); + } + if (!debug_event) continue; @@ -601,5 +615,5 @@ main (int argc, char **argv) pgm++; - while ((opt = getopt (argc, argv, "b:m:o:fndut")) != EOF) + while ((opt = getopt (argc, argv, "b:m:o:fndutwS:")) != EOF) switch (opt) { @@ -631,4 +645,11 @@ main (int argc, char **argv) case 'u': usecs ^= 1; + break; + case 'w': + new_window ^= 1; + break; + case 'S': + flush_period = strtol (optarg, NULL, 10); + break; }