Linux与Windows中的C编码。任何适当的调试面向C的中心IDE?

时间:2011-04-27 00:41:41

标签: c linux debugging ide

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

问题的大部分是没有足够的IDE可以进行实时调试,尤其是在使用fork()的线程或产生进程时。我尝试过Mono,Eclipse,最后是NetBeans,并得出结论认为这些非常好但不适合用C编码。更多的学习曲线正确使用命令行调试器是非常陡峭的。 (就像我之前提到的......我按时按压。)

所以,由于我是一名专业的C#开发人员,我想知道我是否可以在VS2003 / VS2005 / VS2008 / VS2010中完成此操作。如果我不使用系统调用,我可以这样做吗?

特别感兴趣的是FILE *描述符和fread(),fclose(),fseek()方法。我知道它们是标准C库的一部分,但它们是否与平台本身联系在一起? Linux与Windows中的标题是否相同? fork()或共享内存怎么样?

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

非常感谢任何输入。

3 个答案:

答案 0 :(得分:3)

  

问题的大部分是没有足够的IDE可以进行实时调试,尤其是在使用fork()的线程或产生进程时。

Eclipse CDT可能对C / C ++开发和集成调试提供最佳的整体支持。

请注意,多线程和多进程调试在最好的情况下可能很困难。此时投资一个好的日志记录框架是可取的,并且可能比依赖调试器更有用。有很多可供选择 - 看看Log4C ++等等。即使printf处于紧要关头也是非常宝贵的。

  

所以,由于我是一名专业的C#开发人员,我想知道我是否可以在VS2003 / VS2005 / VS2008 / VS2010中完成此操作。如果我不使用系统调用,我可以这样做吗?

如果您只注意使用便携式呼叫而不是Win32专用API,那么您应该没问题。此外,还有许多库(用于C ++库,例如Boost++,它们提供了丰富的功能,在Windows,Linux和其他软件上的工作方式相同。

  

特别感兴趣的是FILE *描述符和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和port上写入Windows,但YMMV。

答案 1 :(得分:1)

看起来我是第一个在这里推荐Emacs的人。以下是Emacs的工作原理。当你安装它时,它只是一个带有大量扩展的文本编辑器(默认包含调试器和C字体锁定)。当您开始使用它并安装您错过的扩展时,它不仅仅是一个编辑器。它很快就会成为一个IDE,然后很容易成为可以在一帧内避开操作系统的东西。

Emacs可能需要很长时间才能学习,与此同时,如果没有按成本部分,可以使用Visual Slick Edit。我在两个平台上都使用过它,并且看到它适用于版本控制,标签等。

答案 2 :(得分:0)

也许Code::Blocks?我喜欢它,虽然它说它适用于C ++,但它对于普通C来说当然也是非常好的。