首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MSYS2 /MINGW64GDB调试用MSYS2/MINGW64工具链构建但不是从MSYS2外壳内部构建的程序

如何使用MSYS2 /MINGW64GDB调试用MSYS2/MINGW64工具链构建但不是从MSYS2外壳内部构建的程序
EN

Stack Overflow用户
提问于 2021-10-08 06:16:33
回答 1查看 287关注 0票数 1

我用MSYS2 MINGW64编译器构建了neovim 。它建造得很棒。但是构建脚本强制我从一个普通的shell (cmd/pwsh)构建它。

代码语言:javascript
复制
# These are native MinGW builds, but they use the toolchain inside
# MSYS2, this allows using all the dependencies and tools available
# in MSYS2, but we cannot build inside the MSYS2 shell.

因为它是从Windows外部构建的,所以可执行文件中的调试信息被设置为本地MSYS2文件系统,例如F:\projects\neovim\。所以,现在当我从MSYS2 shell内部调用gdb时,除了源代码清单之外,大多数东西都工作得很好。list命令告诉我文件名和行号,但没有告诉我实际的代码。

我从本地shell (pwsh)从MSYS2/MINGW64bin目录运行gdb,从那里我可以看到源代码清单。所以我几乎可以肯定问题出在使用unix文件系统的MSYS2上,例如/f/projects/neovim

由于一些个人原因,我不得不使用MSYS2 shell中的gdb。我不能从本机Windows shell使用gdb。本机shell不能很好地与我的gdb配置一起工作,gdb配置是为我的Linux环境构建的,并且使用gef

那么,有没有办法在MSYS2中将源代码目录设置为Windows风格的会话?或者我可以在构建项目时将源代码目录设置为MSYS2样式?

EN

回答 1

Stack Overflow用户

发布于 2021-11-11 18:32:05

GNU有跨平台的工具链。您可以使用这些工具来(某种程度上)为其他平台构建和调试程序。为了简单起见,我们将只关注gcc和gdb。

gcc和gdb都有跨平台的版本,所以你可以在Linux/Windows上编译Windows/Linux上的C程序。这些GNU工具有称为hosttarget的编译参数。这样,你就可以编译出运行在Windows系统上的gcc/gdb,编译/调试Linux系统下的程序。

mingw64 gdb将targethost都设置为x86_64-w64-mingw32。因此,它可以在Windows系统上运行,并能调试Mingw-w64工具链编译的程序。

另一方面,Msys2 gdb将目标和主机设置为x86_64-pc-msys。因此,它只能在msys系统上运行,这意味着您必须从Msys2外壳内部调用它(否则它将找不到cygwin.dll,并且无法正常执行,如果它找到的话)。此外,它只能调试为msys系统编译的程序。

简而言之,要调试由Mingw-w64工具链编译的程序,请使用mingw64 gdb。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69491308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档