当调试MinGW编译的代码时,gdb出现错误193。

6
当我试图使用Eclipse调试我的代码时,出现了以下情况:alt text
我随后尝试使用Notepad++和命令行gcc手动创建一个简单的Hello World程序。当我启动gdb调试器时,就会出现以下错误:
(gdb) run

Starting program: C:\Documents and Settings\Pieter\Bureaublad/test.exe Error creating process C:\Documents and Settings\Pieter\Bureaublad/test.exe, (error 193).

二进制运行得很好,但是一旦我尝试调试它,就会返回错误193。我正在处理由MinGW GCC编译器处理的C代码。我尝试重新安装编译器和调试器(最新版本),但这没有改变任何东西。它在过去曾经工作过,我不记得对与编译器相关的设置进行过任何更改。
下面是Eclipse生成的错误日志示例。

!ENTRY org.eclipse.cdt.dsf.gdb 4 5012 2010-02-09 18:19:47.375 !MESSAGE 错误:在最终启动序列中出现错误! !STACK 1 org.eclipse.core.runtime.CoreException: 执行MI命令失败:-exec-run。调试器后端返回的错误消息为:创建进程时出错,(error 193)。 at org.eclipse.cdt.dsf.concurrent.Sequence.abortExecution(Sequence.java:560) at org.eclipse.cdt.dsf.concurrent.Sequence.access$4(Sequence.java:552) at org.eclipse.cdt.dsf.concurrent.Sequence$2.handleErrorOrWarning(Sequence.java:424) at org.eclipse.cdt.dsf.concurrent.RequestMonitor.handleFailure(RequestMonitor.java:314) at org.eclipse.cdt.dsf.concurrent.RequestMonitor.handleCompleted(RequestMonitor.java:277) at org.eclipse.cdt.dsf.concurrent.RequestMonitor$2.run(RequestMonitor.java:239) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) !SUBENTRY 1 org.eclipse.cdt.dsf.gdb 4 10004 2010-02-09 18:19:47.546 !MESSAGE 执行MI命令失败:-exec-run。调试器后端返回的错误消息为:创建进程时出错,(error 193)。


“Show Error Log”显示什么?我建议在MinGW中避免路径中的空格。 - Clifford
我在上方添加了一个错误日志提取。 - Pieter
此外,我过去曾经能够编译存储在名称中带有空格的目录中的代码。 - Pieter
5个回答

8
可能是您使用的gdb版本较旧,不支持本地MinGW调试(不太可能,因为您说您更新到了最新版本),或者您错误地调用了调试器?换句话说,如果您的可执行文件名为helloworld.exe,则gdb helloworld可能会给您这个错误,而gdb helloworld.exe可能有效。

编辑:进一步搜索表明尝试一个没有空格的目录名可能有效(解决方案适用于Code::Blocks,但尝试一下也无妨)。


将EXE文件放在不包含空格的路径中确实可以工作,但这样我就无法使用Eclipse进行调试了。有什么补丁或解决方法可以尝试吗? - Pieter
你是在暗示我的问题是由于 PATH 格式不正确引起的吗? 以防万一,这是它的路径: %CommonProgramFiles%\Microsoft Shared\Windows Live;C:\Program Files\CVSNT\;C:\Program Files\doxygen\graphviz\bin;C:\Program Files\Java\jdk1.6.0_18\bin;C:\MinGW\bin 我已经将 GDB 放在 C:\MinGW\bin 中。 - Pieter
不,那个链接是为了让Eclipse与Cygwin配合使用。由于Eclipse CDT和GDB的交互问题,导致存在空格的问题,似乎没有简单的解决办法。如果可能的话,尝试使用符号链接来完成你正在做的事情,这样你仍然可以将文件放在Dropbox中,但是有一个不带空格的符号链接,然后在Eclipse中使用该路径。http://en.wikipedia.org/wiki/NTFS_symbolic_link - Alok Singhal
1
也许可以尝试 http://shell-shocked.org/article.php?id=284#proggies,特别是“junction”程序*可能*能够帮助您处理符号链接。虽然我完全理解您的挫败感。Junction似乎在http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx上,这里是更多程序的列表:http://blog.taragana.com/index.php/archive/how-to-create-hardlinks-junctions-and-symboliclinks-on-windows/。 - Alok Singhal
显示剩余8条评论

3
你的共享库设置被打开了(可能是因为你将项目从可执行文件切换到共享库,然后又切换回来),gcc仍然使用“-shared”选项进行调用,但输出文件具有“.exe”扩展名。在“属性”对话框的“生成器”选项卡中有一个名为“共享”(shared)的复选框。
Properties => C/C++ Build => Settings => Tool Settings => MinGW C Linker => Shared Library Settings.   

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


3
谷歌告诉我,“Error 193”是一个Windows错误代码,意味着某个可执行文件实际上无法运行。看起来你的EXE文件出了些问题 - 你能直接启动它吗?

我可以直接启动它,但是由于它会崩溃,所以我需要进行调试。 - Pieter
@Pieter:我在一个德国的C++论坛上找到了一个描述相同问题的帖子:http://www.c-plusplus.de/forum/viewtopic-var-t-is-229700.html - 看起来并没有提供明确的解决方案(在一个链接的帖子中,有人只有在使用subst将可执行文件放在自己的驱动器上后才使gdb工作),但是你看起来是荷兰人,所以也许它可以给你一些提示。 - Michael Borgwardt
他们是在建议我使用Cygwin来构建Linux二进制文件,而不是Windows二进制文件吗? - Pieter
Cygwin似乎在那种情况下是关键,但当然它仍然可以构建Windows二进制文件。 - Michael Borgwardt
哎呀,那是一个令人沮丧的解决方法。我会再保持这个问题开放一段时间,以防有更简单的解决方案。 - Pieter

0

这个线程提到:

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

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

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


我将Cygwin的bin文件夹添加到了路径中,但Eclipse仍然无法检测到Cygwin。我确保在安装Cygwin后重新启动了Eclipse,并且已经检查了gcc、gcc-core和make。 - Pieter
@Pieter:正确,http://www.cygwin.com/cygwin-ug-net/ov-new1.7.html#ov-new1.7-os:尝试在`/etc/fstab`中声明`/etc`挂载点。 - VonC
像这样吗?/cygdrive/c/cygwin/etc /etc cygdrive defaults 0 0 - Pieter
@Pieter:我错过了你的最后一条评论。你在那个问题上有任何进展吗? - VonC
不,我还没有。我仍然没有弄清楚如何让Eclipse识别Cygwin。 - Pieter
显示剩余6条评论

0

你说:

(gdb) run

程序开始运行:C:\Documents and Settings\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). - Pieter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接