我今天在使用 Eclipse 时遇到了一些我无法解释的事情。
基本上,当我尝试调试一个在结束前写入标准输出的函数时,Eclipse 将不会从该函数返回,并将在那里停止调试。(只要最后写入标准输出,该函数就可以做其他事情。)
导致意外行为的程序将是,例如:
#include <stdio.h>
void testfunc(void)
{
puts("I hate you ");
}
int main(void)
{
testfunc();
printf("so, so much.");
return 3;
}
在这种情况下,它还在堆栈跟踪中显示了一些奇怪的内存位置。
printf 也会导致相同的行为。值得一提的是,当我跨过函数时不会发生这种情况,只有当我跟踪它时才会发生这种情况,这似乎指向了一个不是来自我显示的代码的问题。
将功能更改为:
void testfunc(void)
{
int a;
a=3;
puts("I hate you ");
}
获取发送到进程的 SIGSEGV 信号,同时:
void testfunc(void)
{
int a;
puts("I hate you ");
a=3;
}
工作没有问题。
正如我所说,单步执行函数或仅运行程序(而不是调试)工作正常,使用 gcc 手动编译并在终端上运行程序也是如此。
我正在运行 Fedora 19,Eclipse 是版本:4.3.1,构建 id:5fc19
有任何想法吗?