3

我正在尝试使用以下代码在 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"...而且我不能再踩了。我认为这是dbgeclipse 不能很好地解析的消息。我在某个地方读到了我需要\n在函数末尾添加的内容printf——确实有效,但最后我需要printf没有\n。如果我在发布模式下运行 - 打印正常。
我做错了什么,我该如何继续跟进printf

更新好的 - 我发现了导致这种行为的原因(但我仍然有问题) - 这是因为这个链接:printf not print on console。我添加了 setbuf(stdout, NULL); 用于在调试中启用打印,但我无法执行。如果我删除这个 setbuf(stdout, NULL); 由于缓冲区,我在调试模式下看不到 printf(但我可以继续单步执行)。有什么建议吗?

4

1 回答 1

3

如果您遵循链接到的链接和答案,您最终会访问: https ://bugs.eclipse.org/bugs/show_bug.cgi?id =173732归类为“WON't FIX”。

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

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

我可以想到在 Eclipse CDT 中解决这个问题:在调试模式下注入你自己的 c-runtime 调试库和无缓冲的标准输出。我想这可以用相当于 LD_PRELOAD 的 Windows 来完成(尽管我不知道这在 Windows 世界中是什么样子,或者即使它是可行的)。

于 2013-07-02T09:22:05.530 回答