This is the mail archive of the cygwin@cygwin.com 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]

cygpath hang - using gdb


> I will be investigating the problem in every way that anyone can
> think of as time permits. No promises though, as usual.
> I'll have to learn bits and pieces of cvs and gdb for starters -
> I'll do my best.

$ MODE=ironic rant

 "I'll be back" - is this a general salute nowadays? ;-P

You're about to see me trying to use gdb for the first time. Say after me
please: "YES, WE LOVE IT!" ...  Ahh... I didn't hear you ;-)

$ MODE=serious

Looking at "sample use" in "info gdb" I see things that looks fairly
straight forward and familiar. Now when I try "gdb --pid=<cygpath pid>" -
when cygpath has hung - I end up with a situation that I don't recognise
from that sample.

A couple of "s" commands and the gdb session ends up having no "(gdb)"
prompt. I get the impression that cygpath has stopped somewhere in a system
DLL, and debugging fails in there. Killing cygpath makes the prompt return.

In hope that it will tell SOMETHING I have copied two sessions into the
remainder of this message.

 I'll be persuing this a bit more, but that might take some time.
Please *DO* point out facts for me if you see anything useful.


$ pwd
/bin

$ g++ -O0 -g3 -o cygpath cygpath.cc

$ objdump -g cygpath.exe | wc -l
  18485

$ cat /etc/postinstall/t3.sh
#!/bin/bash -x

TOPFOLDER="`cygpath -A -P`/Cygwin-XFree86"
echo $TOPFOLDER

$ cygstart -- /install/setup.exe --mno-md5
<click "Next"...>
"Running /etc/postinstall/t3.sh" at 99% <STOP>

$ ps
      PID    PPID    PGID     WINPID  TTY  UID    STIME COMMAND
      576       1     576       1988  con  500 10:15:50 /usr/bin/rxvt
I    1100     576    1100        304    0  500 10:15:50 /usr/bin/bash
      360       1     360       2016  con  500 14:19:55 /usr/bin/rxvt
     2340     360    2340       2028    2  500 14:19:55 /usr/bin/bash
I    2776    2340    2776       2736    2  500 14:34:39 /usr/bin/info
      672       1     672        820  con  500 15:18:15 /usr/bin/rxvt
     2796     672    2796       1952    1  500 15:18:15 /usr/bin/bash
     2816       1    2816       2816  con  500 15:29:50 /usr/bin/sh
I     612    2816    2816        612  con  500 15:29:50 /usr/bin/bash
     2828     612    2816       2828  con  500 15:29:51 /usr/bin/cygpath
      732    2796     732       2740    1  500 15:29:59 /usr/bin/ps

$ gdb --pid=2828
GNU gdb 2003-09-20-cvs (cygwin-special)
Copyright 2003 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i686-pc-cygwin".
Attaching to process 2828
[Switching to thread 2828.0x7d8]
(gdb) bt
#0  0x77fa144c in ntdll!DbgUiConnectToDbg () from
/cygdrive/f/WINNT/system32/NTDLL.DLL
#1  0x7c50dfdb in KERNEL32!DebugActiveProcess () from
/cygdrive/f/WINNT/system32/KERNEL32.DLL
#2  0x7c4e987c in SetThreadExecutionState () from
/cygdrive/f/WINNT/system32/KERNEL32.DLL
--

Using s, n, f, file, p or list from here seems to be of no use. Any advice?

--
(gdb) s
Single stepping until exit from function ntdll!DbgUiConnectToDbg,
which has no line number information.
0x7c50dfdb in KERNEL32!DebugActiveProcess () from
/cygdrive/f/WINNT/system32/KERNEL32.DLL
(gdb) list
No symbol table is loaded.  Use the "file" command.
(gdb) f
#0  0x7c50dfdb in KERNEL32!DebugActiveProcess () from
/cygdrive/f/WINNT/system32/KERNEL32.DLL
(gdb) s
Single stepping until exit from function KERNEL32!DebugActiveProcess,
which has no line number information.
-- no more prompt here --

>From another bash:
$ ps
      PID    PPID    PGID     WINPID  TTY  UID    STIME COMMAND
...
     2828     612    2816       2828  con  500 15:29:51 /usr/bin/cygpath
     2012    2796    2012        552    1  500 15:30:10 /usr/bin/gdb
     2844    1100    2844       2740    0  500 15:47:40 /usr/bin/ps

$ kill -9 2012

$ ps
      PID    PPID    PGID     WINPID  TTY  UID    STIME COMMAND
...
     2828     612    2816       1552  con  500 15:47:51 <defunct>
     2768    1100    2768        392    0  500 15:47:58 /usr/bin/ps

$ kill -9 2828

$ ps
      PID    PPID    PGID     WINPID  TTY  UID    STIME COMMAND
      576       1     576       1988  con  500 10:15:50 /usr/bin/rxvt
     1100     576    1100        304    0  500 10:15:50 /usr/bin/bash
      360       1     360       2016  con  500 14:19:55 /usr/bin/rxvt
     2340     360    2340       2028    2  500 14:19:55 /usr/bin/bash
I    2776    2340    2776       2736    2  500 14:34:39 /usr/bin/info
     2816    1100    2816       1824    0  500 15:48:09 /usr/bin/ps

$


-- YET ANOTHER SESSION --
Does this tell anything at all?

(I was trying to find out anything useful about the situation)

(gdb) info source
Current source file is cygpath.cc
Compilation directory is /bin/
Located in /usr/bin/cygpath.cc
Contains 769 lines.
Source language is c++.
Compiled with stabs debugging format.
Does not include preprocessor macro info.
(gdb) attach 1076
Attaching to program `/usr/bin/cygpath.exe', process 1076
[Switching to thread 1076.0xacc]
(gdb) bt
#0  0x77fa144c in ntdll!DbgUiConnectToDbg () from
/cygdrive/f/WINNT/system32/NTDLL.DLL
#1  0x7c50dfdb in KERNEL32!DebugActiveProcess () from
/cygdrive/f/WINNT/system32/KERNEL32.DLL
#2  0x7c4e987c in SetThreadExecutionState () from
/cygdrive/f/WINNT/system32/KERNEL32.DLL
(gdb) f
#0  0x77fa144c in ntdll!DbgUiConnectToDbg () from
/cygdrive/f/WINNT/system32/NTDLL.DLL
(gdb) info args
No symbol table info available.
(gdb) info dll
DLL Name                                 Load Address
/cygdrive/f/WINNT/system32/NTDLL.DLL     77f81000
/usr/bin/cygwin1.dll                     61001000
/cygdrive/f/WINNT/system32/KERNEL32.DLL  7c4e1000
/cygdrive/f/WINNT/system32/USER32.DLL    77e11000
/cygdrive/f/WINNT/system32/GDI32.DLL     77f41000
/cygdrive/f/WINNT/system32/ADVAPI32.DLL  7c2d1000
/cygdrive/f/WINNT/system32/rpcrt4.dll    77d31000
(gdb) info frame
Stack level 0, frame at 0xb6ffac:
 eip = 0x77fa144c in ntdll!DbgUiConnectToDbg; saved eip 0x7c50dfdb
 called by frame at 0xb6ffbc
 Arglist at 0xb6ffa4, args:
 Locals at 0xb6ffa4, Previous frame's sp is 0xb6ffac
 Saved registers:
  eip at 0xb6ffa8
(gdb) f 1
#1  0x7c50dfdb in KERNEL32!DebugActiveProcess () from
/cygdrive/f/WINNT/system32/KERNEL32.DLL
(gdb) info frame
Stack level 1, frame at 0xb6ffbc:
 eip = 0x7c50dfdb in KERNEL32!DebugActiveProcess; saved eip 0x7c4e987c
 called by frame at 0xb6fff4, caller of frame at 0xb6ffac
 Arglist at 0xb6ffb4, args:
 Locals at 0xb6ffb4, Previous frame's sp is 0xb6ffbc
 Saved registers:
  ebx at 0xb6ff20, ebp at 0xb6ffb4, eip at 0xb6ffb8
(gdb) f 2
#2  0x7c4e987c in SetThreadExecutionState () from
/cygdrive/f/WINNT/system32/KERNEL32.DLL
(gdb) info frame
Stack level 2, frame at 0xb6fff4:
 eip = 0x7c4e987c in SetThreadExecutionState; saved eip 0x0
 caller of frame at 0xb6ffbc
 Arglist at 0xb6ffec, args:
 Locals at 0xb6ffec, Previous frame's sp is 0xb6fff4
 Saved registers:
  ebx at 0xb6ff20, ebp at 0xb6ffec, eip at 0xb6fff0
(gdb) info functions
All defined functions:

File cygpath.cc:
int main(int, char **);
static void convert_slashes(char*);
static void doit(char*);
static void dowin(char);
static char *get_long_name(char const*, unsigned long&);
static DWORD get_long_path_name_w32impl(char const*, char*, unsigned long);
static char *get_long_paths(char*);
static char *get_mixed_name(char const*);
static char *get_short_name(char const*);
static char *get_short_paths(char*);
static void print_version();
static void usage(__sFILE64*, int);

Non-debugging symbols:
0x00401000  _RUNTIME_PSEUDO_RELOC_LIST_END__
0x00401000  _RUNTIME_PSEUDO_RELOC_LIST__
0x00401000  __RUNTIME_PSEUDO_RELOC_LIST_END__
0x00401000  __RUNTIME_PSEUDO_RELOC_LIST__
0x00401000  _end__
0x00401000  mainCRTStartup
0x00401040  __do_sjlj_init
0x00403370  w32_atom_suffix
0x00403390  __w32_sharedptr_default_unexpected
0x004033b0  __w32_eh_shared_initialize
0x00403420  __w32_sharedptr_initialize
0x00403560  __w32_sharedptr_set
0x004035f0  __w32_sharedptr_get
0x00403660  __w32_sharedptr_fixup_after_fork
0x00403690  __chkstk
0x00403690  _alloca
0x00403696  probe
0x004036ad  done
0x004036c0  cygwin_crt0
0x00403720  __main
0x00403730  isspace
0x00403740  fgets
0x00403750  setbuf
0x00403760  perror
0x00403770  setmode
0x00403780  fopen
0x00403790  strcasecmp
0x004037a0  strtoul
0x004037b0  getopt_long
0x004037c0  puts
0x004037d0  cygwin_conv_to_win32_path
0x004037e0  cygwin_conv_to_full_win32_path
0x004037f0  cygwin_conv_to_full_posix_path
0x00403800  cygwin_posix_to_win32_path_list
0x00403810  cygwin_win32_to_posix_path_list
0x00403820  cygwin_posix_to_win32_path_list_buf_size
0x00403830  cygwin_win32_to_posix_path_list_buf_size
0x00403840  printf
---Type <return> to continue, or q <return> to quit---q
Quit
(gdb) l
201               continue;
202             }
203           pelem = strchr (next, '\\');
204           len = pelem ? (pelem++ - next) : strlen (next);
205           strncpy (ptr, next, len);
206           ptr[len] = 0;
207           if (next[1] != ':' && strcmp(next, ".") && strcmp(next, ".."))
208             {
209               if (FindFirstFile (buf2, &w32_fd) != INVALID_HANDLE_VALUE)
210                 strcpy (ptr, w32_fd.cFileName);
(gdb) info line 205
Line 205 of "cygpath.cc" starts at address 0x401bec
<_Z26get_long_path_name_w32implPKcPcm+246>
   and ends at 0x401c0e <_Z26get_long_path_name_w32implPKcPcm+280>.
(gdb) bt
#0  0x77fa144c in ntdll!DbgUiConnectToDbg () from
/cygdrive/f/WINNT/system32/NTDLL.DLL
#1  0x7c50dfdb in KERNEL32!DebugActiveProcess () from
/cygdrive/f/WINNT/system32/KERNEL32.DLL
#2  0x7c4e987c in SetThreadExecutionState () from
/cygdrive/f/WINNT/system32/KERNEL32.DLL
(gdb) info program
        Using the running image of child thread 1076.0xacc.
Program stopped at 0x77fa144c.
(gdb) f 0
#0  0x77fa144c in ntdll!DbgUiConnectToDbg () from
/cygdrive/f/WINNT/system32/NTDLL.DLL
(gdb) s
Single stepping until exit from function ntdll!DbgUiConnectToDbg,
which has no line number information.
0x7c50dfdb in KERNEL32!DebugActiveProcess () from
/cygdrive/f/WINNT/system32/KERNEL32.DLL
(gdb) s
Single stepping until exit from function KERNEL32!DebugActiveProcess,
which has no line number information.

- no prompt back after this -

$ kill -9 <cygpath>;kill -9 <gdb> # from another shell

Program exited with code 0204400.
(gdb)
The program is not being run.
(gdb) Killed




/Hannu E K Nevalainen, B.Sc. EE - 59?16.37'N, 17?12.60'E
-- UTC+01, DST -> UTC+02  --
--END OF MESSAGE--


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


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