【问题标题】:Cygwin Exception : open stack dump fileCygwin 异常:打开堆栈转储文件
【发布时间】:2014-09-14 20:48:20
【问题描述】:

我正在使用 Cygwin 以 C 语言在 Windows 7 上开发一个 linux 命令解释器。 我的代码正在正确编译和运行,直到出现此错误:

cygwin_exception::open_stackdumpfile:Dumping stack trace to jstack dump

【问题讨论】:

    标签: c linux cygwin windows-7-x64


    【解决方案1】:

    我发现当函数需要指针时,我尝试将值传递给函数时出现此错误。

    例如:

    int arr[] = {1, 2, 3};
    int i = 3;
    memmove(i, arr, 3);
    

    此代码将获得一个 cygwin_exception::open_stackdumpfile,因为您将 int i(它是一个值)传递给一个需要内存地址的函数。

    但是,这完全是基于我的经验,当然也可能有其他原因导致此错误。

    【讨论】:

      【解决方案2】:

      我今天刚遇到这个问题。我发现在后台运行了另一个 cygwin 会话(shell)。它们可能会影响彼此的内存位置/分配。 一旦我杀了他们两个,打开一个新的,一切都恢复正常了! 希望对你有帮助

      【讨论】:

      • 我发现了同样的问题,所有cygwin终端都注册了一个runnin bash.exe,但是有一个额外的sh.exe在运行。
      【解决方案3】:

      我在尝试使用 memcpy() 时遇到此错误。问题是我试图将一个数组复制到一个未初始化的指针中。

      错误代码:

      int array[] = {1, 2, 3, 4, 5};
      int *arrPtr = array;
      int *mem_ptr = NULL;                           // this row
      memcpy(mem_ptr, array, 5 * sizeof(int));
      

      我是如何解决的:

      int array[] = {1, 2, 3, 4, 5};
      int *arrPtr = array;
      int *mem_ptr = malloc(sizeof(int) * 5);       // this row
      memcpy(mem_ptr, array, 5 * sizeof(int));
      

      【讨论】:

        【解决方案4】:

        这适用于 ConEmu 和其他基于 Windows 的终端仿真器,您可能需要将“回滚”或“缓冲区高度”设置为小于 2000。

        实际数量取决于终端的宽度。对我来说,最大化的窗口有 240 个字符,在 cygwin 应用程序开始崩溃之前可以支持大约 3200 行“回滚”。

        我可以通过在干净的终端上运行 ls -l -R / | head -n 2000 或类似的输出来测试这一点,并导致 cygwin 应用程序崩溃。

        【讨论】:

          【解决方案5】:

          将 char 数组与 strcpystrcat 连接时遇到类似问题

          const char *host = "http://myaddress";
          const char *uri = "/api/devices/";
          const char *changes = "getChanges?";
          const char *token = "token=something";
          char *link;
          
          strcpy(link, host);
          strcat(link, uri);
          strcat(link, changes);
          strcat(link, token);
          puts(link);
          

          在执行strcpy 时出现问题。 我通过将char *link 更改为char link[50] 解决了这个问题

          【讨论】:

            【解决方案6】:

            我在以下示例中遇到此错误:

            v=d/t;

            t 和 d 都被声明为 int; d 已计算;

            我忘了表达我们得到(计算)t 的方式。这让我遇到了这种错误。

            【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-13
            • 2012-09-04
            • 2012-10-15
            相关资源
            最近更新 更多