Cygwin的GDB缺少sigfe.s?

Cygwin的GDB缺少sigfe.s?,gdb,cygwin,Gdb,Cygwin,在为学校做了一些编程作业之后,我决定开始做一些我想做的附带项目。我决定在Windows上安装vim,并使用Cygwin将其正确链接。首先,我安装了gcc和gdb,以查看是否一切正常。我制作了一个包含一些printf的快速C文件,这样我就可以使用gdb进入它们 我可以在main中设置一个断点,运行程序,获取第一个printf,但是当我尝试进入下一行时,出现了一个错误 (gdb) step _sigfe_puts () at sigfe.s:7019 7019 sigfe.s: No such

在为学校做了一些编程作业之后,我决定开始做一些我想做的附带项目。我决定在Windows上安装vim,并使用Cygwin将其正确链接。首先,我安装了gcc和gdb,以查看是否一切正常。我制作了一个包含一些printf的快速C文件,这样我就可以使用gdb进入它们

我可以在main中设置一个断点,运行程序,获取第一个printf,但是当我尝试进入下一行时,出现了一个错误

(gdb) step
_sigfe_puts () at sigfe.s:7019
7019    sigfe.s: No such file or directory.
我认为我没有正确安装gdb,所以我重新安装了它。我试着使用UltraGDB看看它是否有用,但同样的事情发生了,这次给了我一个更清楚的错误

Can't find a source file at "C:/cygwin64/cygwin/src/cygwin/cygwin-2.8.0/cygwin-2.8.0-1.x86_64/build/x86_64-pc-cygwin/winsup/cygwin/sigfe.s" 
Locate the file or edit the source lookup path to include its location.
我怀疑它与权限有关,所以我试图查找该目录,结果发现它确实不存在。C:/cygwin64/没有cygwin文件夹,更不用说名为src的子文件夹等等。我发现cygwin64/usr中有一个名为x86_64-pc-cygwin的文件夹,但它根本没有winsup文件夹

我不知道我现在能做些什么来修复这个错误,在过去的几天里它一直困扰着我,并且没有找到任何关于这个的修复方法。我假设GDB在错误的位置查找此文件,但是如果我使用Cygwin安装程序可执行文件安装了GDB,那么这是否应该正常工作?任何帮助都将不胜感激,谢谢

完成测试运行,但出现错误:

$ gdb ./test
GNU gdb (GDB) (Cygwin 7.10.1-1) 7.10.1
Copyright (C) 2015 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 ./test...done.
(gdb) break main
Breakpoint 1 at 0x1004010ed: file test.c, line 6.
(gdb) run
Starting program: /home/User/test
[New Thread 13236.0x4c0]
[New Thread 13236.0x824]
[New Thread 13236.0x3078]
[New Thread 13236.0x374]

Breakpoint 1, main () at test.c:6
6         printf("Hello\n");
(gdb) step
_sigfe_puts () at sigfe.s:7019
7019    sigfe.s: No such file or directory.
(gdb)
7020    in sigfe.s
(gdb)
7023    in sigfe.s
(gdb)
_sigfe () at sigfe.s:19
19      in sigfe.s
(gdb)
20      in sigfe.s
(gdb)
21      in sigfe.s
.
.
.
(stops responding after various steps)
$gdb./test
GNU gdb(gdb)(Cygwin 7.10.1-1)7.10.1
版权所有(C)2015免费软件基金会。
许可证GPLv3+:GNU GPL版本3或更高版本
这是自由软件:您可以自由更改和重新发布它。
在法律允许的范围内,不存在任何担保。键入“显示复制”
和“显示保修”了解详细信息。
此GDB配置为“x86_64-pc-cygwin”。
键入“显示配置”以获取配置详细信息。
有关错误报告说明,请参阅:
.
在线查找GDB手册和其他文档资源,网址为:
.
要获得帮助,请键入“帮助”。
键入“apropos word”以搜索与“word”相关的命令。。。
正在从读取符号。/测试…完成。
(gdb)主断路器
0x1004010ed处的断点1:文件test.c,第6行。
(gdb)运行
启动程序:/home/用户/测试
[新螺纹13236.0x4c0]
[新螺纹13236.0x824]
[新螺纹13236.0x3078]
[新螺纹13236.0x374]
test.c处的断点1,main():6
6 printf(“Hello\n”);
(gdb)步骤
_sigfe_把()放在sigfe.s:7019
7019 sigfe.s:没有这样的文件或目录。
(gdb)
sigfe.s中的7020
(gdb)
sigfe.s中的7023
(gdb)
_sigfe()在sigfe.s:19
sigfe.s中的19
(gdb)
20英寸
(gdb)
sigfe.s中的21
.
.
.
(在执行各种步骤后停止响应)

sigfe.s
是在cygwin构建期间动态创建的源文件

它出现在生成树中:

$ find . -iname "*sigfe*"
./x86_64-unknown-cygwin/winsup/cygwin/sigfe.o
./x86_64-unknown-cygwin/winsup/cygwin/sigfe.s
而且它似乎是唯一具有这种特征的文件

$ find . -iname "*.s"
./x86_64-unknown-cygwin/winsup/cygwin/sigfe.s
理论上,它应该包含在
cygwin debuginfo
包中

$ cygcheck -l cygwin-debuginfo | grep -i "s$"
/usr/src/debug/cygwin-2.8.1-0.1/newlib/libc/machine/x86_64/memcpy.S
/usr/src/debug/cygwin-2.8.1-0.1/newlib/libc/machine/x86_64/memset.S
/usr/src/debug/cygwin-2.8.1-0.1/newlib/libc/machine/x86_64/setjmp.S
您可以在cygwin邮件列表中突出显示该问题。
sigfe.s
是Cygwin的C运行时库源代码的一部分,因此它通常不会出现在您的计算机上。您应该使用
next
命令跳过对
printf
的函数调用,因为逐行遍历库代码不是很有用。如果您确实希望单步执行库代码,则需要下载其源代码或使用
stepi
,它将逐个汇编指令单步执行代码汇编指令。有关这些命令的更多详细信息,请参见:抱歉,如果我开始调用我编写的一些函数,那么“下一步”就没有用了。例如,使函数foo()在第一个printf之后调用,如果使用next,它将不会提供我需要的信息,例如foo()方法中的单个行。我需要知道函数内部发生了什么,所以我确实需要step,不是库代码步进,而是我自己的代码。因此,使用
step
步进您编写的函数并获得源代码,然后使用
next
逐步浏览您没有编写的库函数,也没有源代码。虽然现在我可以逐步进入我想要的函数,但它不会逐行进行。我有INTA;int b;printf(“Foo”);进入函数只会给我printf(“Foo”)而不是int a。如果我在windows中安装gdb源代码并尝试在我的bashrc中设置一个别名,它会工作吗
intb实际上不会导致在可执行文件中生成任何代码,因此您无法单步执行它们。