[gambit-list] why is the following non-deterministic (and how can I make it

vasil vasil.s.d at gmail.com
Sat Mar 28 10:23:55 EDT 2009


What do you exactly want to do with the pipe to gdb?

If you want to do non-blocking io and want some mechanism of
synchronization, you can always use a thread to check data and
signalize to other threads of presence of some data in the pipe.
Or use a thread, which calls some hook on data arrival.

(define (on-data-income port hook)
   (thread-start!
      (make-thread
         (lambda ()
            (hook (read-line port)))))

If you want to check gdb started and ready, use:

(let loop ((rd (read-line port #\space #f)))
	(if (and (>= (string-length rd) 5)
		 (string-equal?
			(substring rd 0 5)
			"(gdb)"))
		(pp "gdb ready")
		(loop (read-line port #\space #f))))

> Log:
> 
> ~/vis/test:$ gsi test.scm
> "~\"GNU gdb 6.8-debian\\n\""
> "~\"Copyright (C) 2008 Free Software Foundation, Inc.\\n\""
> "~\"License GPLv3+: GNU GPL version 3 or later <
> http://gnu.org/licenses/gpl.html>\\n\""
> "~\"This is free software: you are free to change and redistribute it.\\n\""
> "~\"There is NO WARRANTY, to the extent permitted by law.  Type \\\"show
> copying\\\"\\n\""
> "~\"and \\\"show warranty\\\" for details.\\n\""
> "~\"This GDB was configured as \\\"x86_64-linux-gnu\\\".\\n\""
> "(gdb) "
> ~/vis/test:$ gsi test.scm
> ~/vis/test:$ gsi test.scm
> ~/vis/test:$ gsi test.scm
> "~\"GNU gdb 6.8-debian\\n\""
> "~\"Copyright (C) 2008 Free Software Foundation, Inc.\\n\""
> "~\"License GPLv3+: GNU GPL version 3 or later <
> http://gnu.org/licenses/gpl.html>\\n\""
> "~\"This is free software: you are free to change and redistribute it.\\n\""
> "~\"There is NO WARRANTY, to the extent permitted by law.  Type \\\"show
> copying\\\"\\n\""
> "~\"and \\\"show warranty\\\" for details.\\n\""
> "~\"This GDB was configured as \\\"x86_64-linux-gnu\\\".\\n\""
> "(gdb) "
> ~/vis/test:$ gsi test.scm
> "~\"GNU gdb 6.8-debian\\n\""
> "~\"Copyright (C) 2008 Free Software Foundation, Inc.\\n\""
> "~\"License GPLv3+: GNU GPL version 3 or later <
> http://gnu.org/licenses/gpl.html>\\n\""
> "~\"This is free software: you are free to change and redistribute it.\\n\""
> "~\"There is NO WARRANTY, to the extent permitted by law.  Type \\\"show
> copying\\\"\\n\""
> "~\"and \\\"show warranty\\\" for details.\\n\""
> "~\"This GDB was configured as \\\"x86_64-linux-gnu\\\".\\n\""
> "(gdb) "
> ~/vis/test:$ gsi test.scm
> ~/vis/test:$
> 
> 
> Code:
> 
> ~/vis/test:$ cat test.scm
> (define p (open-process (list path: "gdb"
>                               arguments: '("--interpreter=mi2"))))
> (define (rr)
>   (if (char-ready? p) (pp (read-line p))))
> 
> (rr) (rr) (rr) (rr) (rr) (rr) (rr) (rr) (rr) (rr)
> (rr) (rr) (rr) (rr) (rr) (rr) (rr) (rr) (rr) (rr)
> 
> 
> Questions:
> 
> 1) Why is this non-deterministic? (subject to how fast gdb prints out its
> data?)
> 
> 2) How can I make it deterministic? (I'd prefer something better than "sleep
> for 0.5 seconds")
> 
> Thanks!
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list




More information about the Gambit-list mailing list