【问题标题】:C - Eclipse - "Mixed" dialect and ANSI support crash program?C - Eclipse - “混合”方言和 ANSI 支持崩溃程序?
【发布时间】:2014-10-08 14:05:20
【问题描述】:

我在 Eclipse 中遇到了一个奇怪的 C 问题。右键单击我的项目,我转到属性、C/C++ 构建、设置、Gcc C 编译器方言。在下拉菜单中,默认情况下,语言标准下没有任何内容,我的程序运行良好。但是,通过更改为其他任何内容(C90、C99 或 C11),程序在运行时会崩溃。

使用调试器,我查看了反汇编,并在某个内存地址收到了关于 strln() 的投诉,但我不确定从哪里开始。

这是一些汇编:

mov (%ecx),%al
add $0x1,%ecx
test %al,%al
je 0x75234434 <strlen+97>
test $0x3,%ecx
jne 0x752343df <strlen+12>
...

有趣的是,在没有指定方言的情况下,单击其他,然后单击支持 ANSI 程序 (-ansi) 会导致完全相同的错误。

欢迎任何和所有的建议:)

根据要求的跟踪簿:

#0  0x752343df in strlen () from C:\WINDOWS\syswow64\msvcrt.dll
#1  0x0044e2bd in __mingw_pformat ()
#2  0x0044ca5f in __mingw_vfprintf ()
#3  0x00417156 in fprintf (__stream=0x752c2980 <msvcrt!_iob+128>, __format=0x4561dc <__register_frame_info+4547036> "%s %.2lf %s %.0lf %.0lf %.2lf %.2lf %.2lf %.2lf ") at c:/mingw/include/stdio.h:246
#4  0x00418893 in skriv_v_profil (tag=0x809fe8, nasta_stat=..., sign=1, variant=2) at ..\src\kortid.c:314
#5  0x00419d65 in kor_tid (tag=0x809fe8, v2=24.25, smax=452, tmax=100000) at ..\src\kortid.c:642
#6  0x00427fdb in gang_tid (tag=0x809fe8, ret_kod=2, tmax=100000, skriv_g3=0, test_finnsg3=0, t_ack=3030.5876288659802) at ..\src\gangtid.c:2617
#7  0x00403215 in kor_tag (taget=0x809fe8, lanken=0x7cc338, riktning=1, result=0x7da1f8, resflg=7) at ..\src\ttt2gtk.c:702
#8  0x00407ff7 in grenkortag (banap=0x28fd6c, grnidx=0, tagtyp=0x7e6ea0, ttpidx=0, riktn=1, resflg=7, stppl=0x0, resp=0x28fd34) at ..\src\ttt2gtk.c:2405
#9  0x004201b8 in main (argc=11, argv=0x7e1b00) at ..\src\gtb.c:991

抱歉,我错过了复制后半部分,因为窗口非常小。

【问题讨论】:

  • 查看原始C代码会有所帮助。
  • 超过 30+ K 行,我们不知道是什么导致了问题,抱歉...
  • 你至少知道哪里崩溃了,对吧?你能展示一下这个功能吗?或者至少削减它以重现错误?根据您的描述,您在某处调用未定义行为的甜甜圈美元。
  • 其实我没有,因为它没有告诉我。我运行调试器,越过我的断点,接下来出现的是一个空白窗口,显示“在 0x752343df 处没有可用于“strlen() 的源”。查看反汇编...”。如果有可用的代码,我当然会发布它。有什么建议么?不完全确定这意味着什么。
  • 您使用的调试器有一个调用堆栈。除非你的代码覆盖了它,从而破坏了你直接的“我是如何来到这里”的历史,否则它最有助于了解是什么有助于发现你是如何到达这里的。如果您可以在控制台模式下访问gdb(Eclipse 中应该有一个),那么一个简单的bt 命令应该会为您提供调用堆栈。

标签: c eclipse c99 ansi dialect


【解决方案1】:

我相信我发现了错误。其中一个变量变为 -1 并在 Eclipse 中突出显示。我不知道细节,但我认为解决方案将非常具体,我必须自己找到它。感谢 John Bode 和 WhozCraig 的帮助,尤其是在回溯方面。救生员,谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-06
    • 2013-05-07
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多