This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


>-----Original Message-----
> From: cygwin-owner@cygwin.com <cygwin-owner@cygwin.com> On Behalf Of Rockefeller, Harry
>Sent: Friday, January 17, 2020 11:35 AM
>To: Jon Turney <jon.turney@dronecode.org.uk>; The Cygwin Mailing List <cygwin@cygwin.com>
>Subject: RE: cin and read(*,*) not waiting for kbd input in gdb

>>>-----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.

Following your test I do not have cin wait for kbd input whenever a breakpoint is set.
In fact, if I run 'disa 1' to disable the breakpoint and then just 'run'
(to restart the program from the beginning) then
the program does pause for my keyboard input.
This happens in both my Win 7 and Win 7 - RTX OS boots.
This happens in both gdb 8.2.1-1 and 8.3.1-1.  It does not happen with
Gdb version 8.1.1-1.

Egg on my face now: never mind the stuff about cin and cout
Not working when run directly.  This was my error.
'gdb test.exe' ran the local test.exe, but just 'test.exe' ran /usr/bin/test.
I should have been running './test.exe'.

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]