cin and read(*,*) not waiting for kbd input in gdb

Rockefeller, Harry Harry.Rockefeller@flightsafety.com
Fri Jan 17 17:34:00 GMT 2020


>>-----Original Message-----
>>From: Jon Turney <jon.turney@dronecode.org.uk>
>Sent: Friday, January 17, 2020 9:40 AM
>To: The Cygwin Mailing List <cygwin@cygwin.com>
>Cc: Rockefeller, Harry <Harry.Rockefeller@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.


B‹KCB”›Ø›[H™\ܝΈ‹ËØÞYÝÚ[‹˜ÛÛKܛ؛[\Ëš[B‘TNˆ‹ËØÞYÝÚ[‹˜ÛÛKÙ˜\KÃB‘ØÝ[Y[][ÛŽˆ‹ËØÞYÝÚ[‹˜ÛÛKÙØÜËš[B•[œÝXœØÜšX™H[™›Îˆ‹ËØÞYÝÚ[‹˜ÛÛKÛ[ÈÝ[œÝXœØÜšX™K\Ú[\CBƒB


More information about the Cygwin mailing list