c - 使用 eclipse 和 cygwin 调试 C

标签 c eclipse cygwin

我正在尝试在 64 位 Windows 上使用 eclipse-Juno-CDT 和 cygwin-gcc(cygwin 版本=1.7.16,gcc 版本=3.4.4,gdb 版本=7.5.50)调试以下 C 代码。该代码在正常模式下工作正常。最初调试器没有运行,因为没有找到源文件。然后我四处搜索并添加了路径映射信息(从/cygdrive/c到C:\)。现在它正在运行,但存在以下问题:

  1. 我在“hello c 1”行之前放置了一个断点,然后单步执行。但是控制台上没有打印任何内容。

  2. 单步执行最后一行(“exit”)后,我收到错误:“没有可用的 _cygwin_exit_return() 源...”

    // stdio.h and stdlib.h are included, but when I put a #include the code
    // they dont show up, so I deleted those lines in this code fragment.
    int main(void) {
         int a=10;
         int b=5; // breakpoint on this line, single step after this
         printf("hello c 1\n"); // these outputs are not printed in console
         // fflush(stdout);
         printf("A=%d, B=%d\n", a, b); // but debugger shows the correct values in data window
         // fflush(stdout);
         return EXIT_SUCCESS; // error on this line
    }
    

稍后添加:经过更多调试后,我认为即使在退出错误之后,如果我执行“继续”,那么我会在程序终止后在控制台上获取这些行。所以我添加了额外的“fflush(stdout)”行,现在我可以在打印时看到输出。

但是如何解决退出错误问题呢?此外,编辑文件以添加 fflush 以查看调试输出很痛苦 - 有没有办法避免这种情况?有人可以帮我解决这个非常基本的问题,或者指出提供解决方案的地方吗?提前致谢。

最佳答案

虽然 逻辑上 C 程序从 int main() 开始并在该函数返回时结束,但环境(如 Windows 或 Cygwin)经常添加前代码和后代码,用于初始化/分解内存管理,打开/关闭标准流,以及其他此类簿记。使用 Cygwin 编译的可执行文件,在从 int main() 返回后,切换到由 Cygwin 运行时提供的清理函数 _cygwin_exit_return() - 您没有来源,因此您的调试器会提示。

至于立即获得输出,您可以使用无缓冲的输出流。

选项一,使用 fprintf( stderr, ... )(因为 stderr 根据定义是无缓冲的)。但是,这也会影响程序的非调试行为。

选项二:

int main()
{
// Using NDEBUG as also used by <assert.h>; feel free to use a different define
#ifndef NDEBUG
    // For debugging, set stdout to unbuffered
    setbuf( stdout, NULL );
#endif
    ....

关于c - 使用 eclipse 和 cygwin 调试 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13380240/

相关文章:

android - 制作android ROM "e:signature verification failed"

c - 这应该是 int,那我们为什么要使用 %s?

Eclipse 对 jfxrt.jar 类的访问限制发出警告

java - 更改maven eclipse项目中的java SDK版本

java - 在另一个项目中使用jar文件

c - 如何在 PC 上访问我的 9 位数据串口?

代码块,在控制台中粘贴文本将其关闭

将链表复制到另一个链表 - 迭代 - C - 理解返回的列表

c - 为什么我从recvfrom()获取远程IP地址0.0.0.0?

windows-7 - cygwin下windows 7安装mahout