>>-----Original Message----- >>From: Jon Turney <jon.tur...@dronecode.org.uk> >Sent: Friday, January 17, 2020 9:40 AM >To: The Cygwin Mailing List <cygwin@cygwin.com> >Cc: Rockefeller, Harry <harry.rockefel...@flightsafety.com> >Subject: Re: cin and read(*,*) not waiting for kbd input in gdb >EXTERNAL EMAIL: STOP and verify sender address, links, and attachments before >taking action. >On 16/01/2020 21:02, Rockefeller, Harry wrote: >> Both the Fortran and cpp used to work correctly when run in gdb. > >Thanks for reporting this problem. > >I assume this means that this worked with gdb-8.1.1-1, but not with >gdb-8.2.1-1 (Made available for testing 2019-03-21 [1], promoted to current >2020-01-07 [2]) > >Firstly, can I suggest that if a working gdb is important to you, you try test >versions when they are available. Wider testing helps me make good releases >of gdb. >Secondly, can you try the recently made test release of gdb-8.3.1-1 [3], to >see if this behaves differently? If that doesn't help, you can downgrade to >8.1.1-1 for the moment...
I certainly plan to do that as soon as problem(s) are identified. >[1] https://cygwin.com/ml/cygwin-announce/2019-03/msg00032.html >[2] https://cygwin.com/ml/cygwin/2020-01/msg00064.html >[3] https://cygwin.com/ml/cygwin-announce/2019-12/msg00033.html > >> FWIW, Both Fortran and cpp work correctly, stopping for keyboard input, when >> run outside of gdb. >> >> But now, code simply doesn't stop to take keyboard input inside gdb. >> >> [C++ test code omitted for brevity] >I'm not able to reproduce this problem. Perhaps you can provide a similar >transcript showing the steps to reproduce? I see that when I ran it I also had a few lines like these: [New Thread 6188.0x1e54]. Since I develop mostly for "hard" real time, my default boot is a Win7 with RTX. I rebooted my pc with the Win7 alone (no RTX) and the stdin does work as you show below. I am working with my software support staff to find out if anything changed recently in my PC boot stuff. >> $ gdb rockefeller.exe >> GNU gdb (GDB) (Cygwin 8.2.1-1) 8.2.1 >> Copyright (C) 2018 Free Software Foundation, Inc. >> License GPLv3+: GNU GPL version 3 or later >> <http://gnu.org/licenses/gpl.html> >> This is free software: you are free to change and redistribute it. >> There is NO WARRANTY, to the extent permitted by law. >> Type "show copying" and "show warranty" for details. >> This GDB was configured as "x86_64-pc-cygwin". >> Type "show configuration" for configuration details. >> For bug reporting instructions, please see: >> <http://www.gnu.org/software/gdb/bugs/>. >> Find the GDB manual and other documentation resources online at: >> <http://www.gnu.org/software/gdb/documentation/>. >> >> For help, type "help". >> Type "apropos word" to search for commands related to "word"... >> Reading symbols from rockefeller.exe...done. >> (gdb) b request_time_to_run() >> Breakpoint 1 at 0x1004010e8: file rockefeller.cpp, line 10. >> (gdb) r >> Starting program: /wip/rockefeller.exe >> >> Thread 1 "rockefeller" hit Breakpoint 1, request_time_to_run () at >> rockefeller.cpp:10 >> 10 float tm = 0.0; // Time duration (sec) >> (gdb) n >> 11 std::string ans = ""; // interactive answer for time duration >> (gdb) n >> 12 std::cout << "Supply the equivalent of runtime in seconds. \n"; >> (gdb) n >> Supply the equivalent of runtime in seconds. >> 13 std::cout << "Note: time=0 will stop main. \n"; >> (gdb) n >> Note: time=0 will stop main. >> 14 std::cin >> ans; >> (gdb) n >> 1 >> 15 if ( (int)(ans[0]) < 48 || (int)(ans[0] > 57) ) { >> (gdb) n >> 19 int j = 0; >> (gdb) c >> Continuing. >> a is 1.000000 >> [Inferior 1 (process 12660) exited normally] >> But, simple stuff does run correctly in gdb stopping for terminal input at >> std::cin >> ans; >> FWIW, for simple cpp above neither the cout nor the cin works directly (not >> running in gdb). >Although not related to gdb, that would be a serious cygwin bug. I am still in the Win7 only boot on my PC ... no RTX More on this last problem. This time using Fortran. Test code: program test implicit none real cycle_time_preset /0.0/ ! (seconds) real cycle_length /0.0/ ! (seconds) do if (cycle_time_preset.le.0.0) then write(*,*)'Supply the equivalent of run time in seconds.' write(*,"('(Note: a negative run time will stop run): ',$)") read(*,*) cycle_length else cycle_length = cycle_time_preset end if if (cycle_length .lt. 0.0) stop 'normal termination' end do stop end $ /usr/bin/gfortran -g -ffree-form -ffree-line-length-none -Wunused -ffpe-trap=invalid,zero,overflow -o test.exe test.f harryr@HARRYR-PC ~/ $ test.exe $ Neither standard output nor input works. FWIW, running in gdb both standard input and output work.