程序 .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 上运行时出现异常的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 上的 Cygwin 中运行 crontab?