在eclipse中到达“printf”时无法继续进入调试模式

时间:2013-06-30 06:52:59

标签: c eclipse eclipse-cdt

我正在尝试使用下一个代码在eclipse中调试c:

void print_clause(SAT_clause * c) {
    int l_index;
    printf("(");
    for (l_index = 0; l_index < c->literal_count; l_index++) {
        print_literal(c->literal_arr[l_index]);
        if(l_index != c->literal_count - 1){
            printf(" v ");
        }
    }
    printf(")");
}

但每次我到达"printf("(");"(此功能中的第一个打印件)时,我会在控制台中收到下一条消息:
(*stopped,reason="end-stepping-range"...而且我不能再继续了。我假设这是dbg消息,eclipse不能很好地解析。我在某个地方读到了我需要在\n函数的末尾添加printf - 这确实有效,但我最终需要printf而不需要\n。如果我在释放模式下运行 - 打印正常。
我做错了什么?如何在printf之后继续踩?

更新确定 - 我发现导致此行为的原因(但我仍有问题) - 这是因为此链接:printf not printing on console。我添加了setbuf(stdout,NULL);在调试中启用打印但是我不能步骤。如果我删除这个setbuf(stdout,NULL);由于缓冲区,我无法在调试模式下看到printf(但我可以继续步进)。 任何建议

1 个答案:

答案 0 :(得分:1)

如果您按照链接所列的链接和答案进行操作,则最终会:https://bugs.eclipse.org/bugs/show_bug.cgi?id=173732归类为“不会修复”。

所以,如果这真的困扰你,我的建议是在Windows上使用除Eclipse CDT以外的东西,或者切换到Eclipse CDT将正确运行的POSIX系统(Unix / Linux / BSD / Solaris ...)。

另一个建议是尝试修复Eclipse CDT,但我猜这并不容易,否则他们自己已经这样做了。似乎Windows本身缺乏CDT依赖其控制台的“伪终端”功能。

我可以想到在Eclipse CDT中解决这个问题:在调试模式下,用无缓冲的stdout注入你自己的c-runtime调试库。我想这可以通过Windows等效的LD_PRELOAD来完成(虽然我不知道在Windows世界中它看起来是什么样的,或者即使它是可行的)。