我正在尝试使用下一个代码在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(但我可以继续步进)。 任何建议?
答案 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世界中它看起来是什么样的,或者即使它是可行的)。