【问题标题】:gdb fails with error 193 when debugging MinGW-compiled code调试 MinGW 编译的代码时,gdb 失败并出现错误 193
【发布时间】:2011-01-14 19:32:48
【问题描述】:

当我尝试使用 Eclipse 调试我的代码时会显示:

然后我尝试使用 Notepad++ 和命令行 gcc 手动创建一个简单的 Hello World 程序。当我启动 gdb 调试器时,发生了这种情况:

(gdb) 运行

启动程序: C:\文档和 设置\Pieter\Bureaublad/test.exe 创建进程 C:\Documents 时出错 和 设置\Pieter\Bureaublad/test.exe, (错误 193)。

二进制文件运行良好,但一旦我尝试调试它,就会返回错误 193。我正在使用由 MinGW GCC 编译器处理的 C 代码。我尝试重新安装编译器和调试器(最新版本),但这并没有改变任何东西。它在过去有效,我不记得对与编译器相关的设置进行任何更改。

这是一个由 Eclipse 生成的错误日志示例。

!ENTRY org.eclipse.cdt.dsf.gdb 4 5012 2010-02-09 18:19:47.375!消息错误 在最后的发射序列中!堆栈 1 org.eclipse.core.runtime.CoreException: 执行 MI 命令失败: -exec-run 来自调试器后端的错误消息:创建进程时出错 C:/文档和设置/Pieter/Mijn 文件/我的 Dropbox/Unief/C/H12/Opdr07/Debug/CH12O07.exe, (错误 193)。在 org.eclipse.cdt.dsf.concurrent.Sequence.abortExecution(Sequence.java:560) 在 org.eclipse.cdt.dsf.concurrent.Sequence.access$4(Sequence.java:552) 在 org.eclipse.cdt.dsf.concurrent.Sequence$2.handleErrorOrWarning(Sequence.java:424) 在 org.eclipse.cdt.dsf.concurrent.RequestMonitor.handleFailure(RequestMonitor.java:314) 在 org.eclipse.cdt.dsf.concurrent.RequestMonitor.handleCompleted(RequestMonitor.java:277) 在 org.eclipse.cdt.dsf.concurrent.RequestMonitor$2.run(RequestMonitor.java:239) 在 java.util.concurrent.Executors$RunnableAdapter.call(未知 来源)在 java.util.concurrent.FutureTask$Sync.innerRun(未知 来源)在 java.util.concurrent.FutureTask.run(未知 来源)在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(未知 来源)在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(未知 来源)在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(未知 来源)在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知 来源)在 java.lang.Thread.run(未知来源) !SUBENTRY 1 org.eclipse.cdt.dsf.gdb 4 10004 2010-02-09 18:19:47.546 !消息 执行 MI 命令失败: -exec-run 来自调试器后端的错误消息:创建进程时出错 C:/文档和设置/Pieter/Mijn 文件/我的 Dropbox/Unief/C/H12/Opdr07/Debug/CH12O07.exe, (错误 193)。

【问题讨论】:

  • “显示错误日志”显示什么?我建议避免使用 MinGW 的路径中的空格。
  • 我在上面添加了一个错误日志提取。
  • 另外,我过去能够编译存储在名称中带有空格的目录中的代码。

标签: c eclipse gcc gdb debugging


【解决方案1】:

Google 告诉我“错误 193”是 Windows 错误代码,这意味着可执行文件实际上不是可执行文件。您的 EXE 似乎有问题 - 您可以直接启动它吗?

【讨论】:

  • 我可以直接启动它,但是我需要调试它,因为它崩溃了。
  • @Pieter:我在德国 C++ 论坛中发现了一个线程,描述了同样的问题:c-plusplus.de/forum/viewtopic-var-t-is-229700.html - 它似乎没有提供明确的解决方案(在链接到的线程中,有人在使用 subst 将可执行文件放在自己的驱动器上后才让 gdb 工作),但看起来你是荷兰人,所以也许它可以给你一些提示。
  • 他们是否建议我运行 Cygwin 来构建 Linux 二进制文件而不是 Windows 二进制文件?
  • Cygwin 在这种情况下似乎是关键,但它当然仍会构建 Windows 二进制文件。
  • 哎呀。这是一个令人沮丧的解决方法。我将把这个问题留待一段时间,以防万一有更简单的解决方案。
【解决方案2】:

This thread 确实提到:

  • 错误 193 是 ERROR_BAD_EXE_FORMAT
  • 这可能是您的 cygwin 安装的问题。

注意(作为“安装 cygwin 的问题”的示例):如果安装在 cygwin 中引用的路径包含空格,则 gdb 会出现错误(请参阅this thread

当您在 Eclipse CDT 之外重现该问题时,您使用的是什么版本的 gdb?

【讨论】:

【解决方案3】:

可能是您使用的是旧版本的 gdb,即 doesn't support native MinGW debugging(不太可能,因为您说您已更新到最新版本),或者您是 invoking the debugger incorrectly?换句话说,如果你的可执行文件被命名为helloworld.exegdb helloworld 可能会给你这个错误,而gdb helloworld.exe 可能会起作用。

编辑:进一步的谷歌搜索表明尝试directory name without spaces 可能有效(解决方案适用于 Code::Blocks,但尝试并没有什么坏处)。

【讨论】:

【解决方案4】:

你说:

(gdb) 运行

启动程序:C:\Documents and 设置\Pieter\Bureaublad/test.exe 创建进程 C:\Documents 时出错 和 设置\Pieter\Bureaublad/test.exe, (错误 193)。

可能与可执行路径末尾的正斜杠/反斜杠有关吗?也许Bureaublad/test.exe 部分在这里是作为单个可执行文件,但找不到?

【讨论】:

  • 如果我这样做gdb "C:\Documents and Settings\Pieter\Bureaublad\CH14O01.exe"(这个文件确实存在),即使这次没有正斜杠,调试器也会返回相同的错误:Error creating process C:\Documents and Settings\Pieter\Bureaublad\CH14O01.exe, (error 193).
【解决方案5】:

您的共享库设置已打开(可能是因为您将项目从可执行文件切换到共享库,然后返回)并且仍然使用“-shared”选项调用 gcc,但输出文件具有 .exe延期。在

中有一个名为“共享”的复选框
Properties => C/C++ Build => Settings => Tool Settings => MinGW C Linker => Shared Library Settings.   

确保它没有被选中。在我关闭它之前,我也有错误 193。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    相关资源
    最近更新 更多