gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:05:46 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com