c++ - 进入系统,Linux下的CRTL功能与Eclipse

标签 c++ linux eclipse

我是 Visual C++ 专家,但 Linux 开发对我来说还是个新鲜事。在 Visual Studio 中,可以轻松跟踪 C 运行时库实现的任何代码。我只需要确保源代码已安装,并且可以直接进入我想要的任何函数 - malloc()、cout::operator<<() 等等。

我正在尝试使用 Eclipse 的 C++ 包进行开发。我怎样才能在那里进入 C 运行时例程?既然Linux是开源的,那么我该如何进入操作系统的日常工作呢?看起来应该是可能的——我是否缺少调试信息、源代码或两者?我的配置中有什么内容吗?

我现在使用的是 Ubuntu 12.10。我正在使用 g++。我相信我正在使用 Eclipse 构建系统,因为我从未导入过 makefile 项目;我刚刚从 Eclipse 中的 C++ 项目向导中开始了一个简单的“Hello World”项目。

稍微修改一下之后:

我已经安装了 libstdc++6-4.2-dbg 软件包,认为它将是 libstdc 库的调试符号:

sudo apt-get install libstdc++6-4.2-dbg

我还安装了 dpkg-dev,因为下一步说我需要它:

sudo apt-get install dpkg-dev

我尝试将 libc6 源安装到我家下的目录中:

apt-get source libc6

此时,尝试进入 printf() 告诉我 printf.c 丢失了。我无法进入 malloc 或 strlen,这表明我不明白 C 运行时库在 Linux 中是如何分解的。 libc、glib 和 libstdc++ 有什么不同?我需要哪些软件包?

如果我要求 Eclipse 打开我拥有的 printf.c 文件(位于 ~/eglibc-2.15/stdio-common/printf.c),它不会打开该文件(不会调整调试窗口以显示源代码)并重新绘制显示有关无法找到该文件的错误消息的窗口。 (在“printf.c”处找不到源文件,请找到该文件或编辑源查找路径以包含其位置。)

最佳答案

虽然,作为 Linux 上的内核开发人员,我确实同意单独使用各个工具是一件值得学习的好事情,因此 Basile 的答案是 usefuel。

但是,使用 Eclipse 应该同样可以单步进入 C 运行时库。但仅仅因为操作系统是开源的,并不意味着它支持您随意在其中攀爬 - 事实上,您无法从用户模式代码进入操作系统本身。你需要 KGDB(谷歌一下),并且你肯定需要第二台计算机来连接到正在调试的计算机,因为当你进入内核时,你基本上会锁定机器,至少在你正在进入的上下文中,但很可能也会阻止其他工作完成,直到你从内核退出,所以例如,如果你进入 open(),在某些时候整个文件系统可能会完全停止工作,直到你退出你所持有的任何锁定。这肯定会让某些软件感到不安。请注意,这只是调试内核时事情​​可能如何意外工作的一个示例,而不是严格意义上的“我已经完成了此操作并且它发生了” - 我已经使用调试器多次调试了内核,并且您必须小心您所做的事情,并且您当然不能在同一台机器上运行调试器,因为当您调试时机器会停止。

回到用户模式,您可以通过 Eclipse 进行调试,基本上您需要做的就是安装您感兴趣的运行时库的源代码,然后继续...与在 Windows 上使用 Visual Studio 的原理相同 - 只不过您在 Linux 系统上运行的几乎所有软件都可以作为源代码提供。您可能需要使用调试符号重新编译一些库,就像在 Windows 中一样,您需要确保调试器知道如何查找源代码。其他一切都应该由 Eclipse 中的调试器处理。我花了大约三年的时间使用 Eclipse 进行本地和远程调试,总的来说,它是有效的。虽然有些地方有些奇怪,但几乎所有调试器都是如此。

祝你好运。

关于c++ - 进入系统,Linux下的CRTL功能与Eclipse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14027693/

相关文章:

c++ - 使用非静态成员变量的静态变量初始化

c++ - 标识符未定义

c++ - 传递给 std::runtime_error 的 ctor 的字符串对象的生命周期是多少?

c++ - 乘以负值的正整数

Eclipse 代码格式化插件

eclipse - 如何将 Eclipse 产品导出到 Linux?

c - Linux/Unix : Non-ascii characters in home directory?

linux - 本地 MAMP 服务器在我的 Mac 上运行。有没有办法从我的 Linux 机器访问它的文件?

linux - 在 AWK 生成的命令字符串中嵌入引号?

javascript - Eclipse:html文件中javascript block 中的任务标签