程序 .exe 在 cygwin 上运行,但在调试和在 Visual Studio 上运行时出现异常

Posted

技术标签:

【中文标题】程序 .exe 在 cygwin 上运行,但在调试和在 Visual Studio 上运行时出现异常【英文标题】:program .exe run on cygwin but give exception on debugging and running on visual studio 【发布时间】:2018-02-12 08:26:22 【问题描述】:

当我从 cygwin 调用它时,我可以运行我的程序。 但是当我想调试它时,在视觉 stdio 上,我得到以下异常:

Exception thrown at 0x610DDA44 (cygwin1.dll) in .exe: 0xC0000005: Access 
violation writing location 0x00000000.

If there is a handler for this exception, the program may be safely continued.

我将我的 cygwin1.dll 路径添加到我的项目环境中,但它不起作用。

我正在尝试通过此链接构建和运行 canfestival:https://canfestival.org/code 请帮忙解决这个异常。

【问题讨论】:

在为 PC 应用程序(Windows 和 Linux)编译的 C++ 代码中,通常无法写入 0x00000000 - 那是 nullptr。如果它在 VS 中运行但不在 cygwin 中运行,那么您的代码在 VS 中编译时会执行不同的操作。在 VS 编译代码中写入 nullptr 将失败,并出现完全相同的运行时错误。 你要么尝试调试代码 - 在 cygwin 上使用 gdb (但我从未尝试过 - 它可能远不如 VS 内置的可视化调试器方便)。或者,您可以尝试在最小的示例代码中隔离错误。可能是,它只是系统函数调用的未经检查的返回值,它在 cygwin 上意外失败,但在 VS 中却没有。看看Eric Lippert: How to debug small programs。有一次,你有这么少的样本但仍然卡住,你可以edit你的问题并将样本添加为minimal reproducible example。 其实我想用可视化stdio调试器@Scheff visual stdio 可能无法完全处理 cygwin 程序。如果是 cygwin 程序,请先尝试使用 gdb。 我发现原因是从makefile中删除-mno-cygwin标志,我切换到使用linux。 【参考方案1】:

正如 Scheff 所说,不建议将 vs 和 cygwin 结合使用。然后我努力在可视化stdio中制作我的库文件,现在不用cygwin也可以调试。如果无法使用 Visual Studio 制作库,也有很多人建议使用 GDB 等 cygwin 调试器。

【讨论】:

以上是关于程序 .exe 在 cygwin 上运行,但在调试和在 Visual Studio 上运行时出现异常的主要内容,如果未能解决你的问题,请参考以下文章

cygwin下安装NCL

如何在 Windows 上的 Cygwin 中运行 crontab?

如何使用cygwin工具链在NetBeans 8.1调试器中观看c ++ STL集合?

下载安装Cygwin

cygwin的安装历程

通过 Cygwin 运行 Windows .EXE 本身是不是比通过 BAT 慢?