在Linux和Windows中用C编程.任何适当的面向c中心的调试IDE



我遇到了一个用c写代码的问题。我的基本问题是我时间紧迫,我正在处理的代码有很多错误,我必须在明天晚上之前"根除"。

问题的更大部分是没有足够的IDE可以进行实时调试,特别是在使用fork()使用线程或生成进程时。我尝试了Mono、Eclipse和NetBeans,最后得出的结论是,这些都非常好,但不适合用c编码。要正确地利用命令行调试器,学习曲线是相当陡峭的。(就像我之前提到的……我的时间很紧

所以,因为我是一名专业的c#开发人员,我想知道我是否可以在VS2003/VS2005/VS2008/VS2010中实现这一点。如果我不使用系统调用,我可以这样做吗?

特别感兴趣的是FILE* descriptor和fread(), fclose(), fseek()方法。我知道它们是标准C库的一部分,但是它们是否绑定到平台本身?头是相同的在Linux和Windows?那么fork()或者共享内存呢?

也许如果我使用VS2010一次构建组件的部分(通过模拟输入和东西),调试那些,然后在整个Linux项目中迁移工作代码将被证明是最有用的?

问题的更大部分是没有足够的IDE可以进行实时调试,特别是当使用线程或派生进程fork()时。

Eclipse CDT可能对C/c++开发和集成调试有最好的全面支持。

请注意,在最好的情况下,多线程和多进程调试可能会很困难。在这一点上投资一个好的日志框架是明智的,这可能比依赖调试器更有用。有很多选择-看看log4c++等等。在紧要关头,即使是printf也是无价的。

所以,因为我是一名专业的c#开发人员,我想知道我是否可以在VS2003/VS2005/VS2008/VS2010中实现这一点。如果我不使用系统调用,我可以这样做吗?

如果你注意只使用可移植调用而不是win32特定的api,你应该没问题。此外,还有许多库(用于c++库,如Boost++)提供了丰富的功能集,这些功能集在Windows, Linux和其他平台上工作相同。

特别感兴趣的是FILE* descriptor和fread(), fclose(), fseek()方法。我知道它们是标准C库的一部分,但是它们是否绑定到平台本身?头是相同的在Linux和Windows?那么fork()或者共享内存呢?

是的,您提到的文件I/O函数在<stdio.h>中,并且是可移植标准C库的一部分。它们在Windows和Linux上的工作原理基本相同,并且不依赖于特定的平台。

但是,fork()和共享内存函数shmget()是POSIX函数,在*nix平台上可用,而在Windows上不具有本机功能。为了便于移植,Cygwin项目在库中提供了这些函数的实现。

如果你正在使用c++, Boost++将为你提供所有这些系统级调用的可移植版本。

也许如果我使用VS2010一次构建组件的部分(通过模拟输入和东西),调试那些,然后在整个Linux项目中迁移工作代码将被证明是最有用的?

你当然可以那样做。只是要注意,Visual Studio有一种把你引向Win32的趋势,你必须警惕不要开始使用不可移植的函数。幸运的是,MSDN上的库参考为您提供了兼容性信息。一般来说,使用标准C或POSIX调用是可移植的。根据我的经验,在*nix上编写并移植到Windows实际上更容易,但是YMMV.

看起来我是这里第一个推荐Emacs的人。下面是Emacs的工作原理。当您安装它时,它只是一个带有许多扩展的文本编辑器(默认情况下包括调试器和C字体锁定)。当您开始使用它并安装您错过的扩展时,它就不仅仅是一个编辑器了。它很快就成长为一个IDE,然后在一个框架下可以避开操作系统。

Emacs可能需要很长时间来学习,同时,如果你不担心成本部分,你可以使用Visual Slick Edit。我在两个平台上都使用过它,发现它在版本控制、标签等方面工作得很好。

可能是Code::Blocks?我喜欢它,虽然它说它适用于c++,但它当然也适用于普通C。

最新更新