【问题标题】:Netbeans C/C++ on Linux "step in to" Linux C runtime code?Linux上的Netbeans C/C++“进入”Linux C运行时代码?
【发布时间】:2013-10-29 13:09:23
【问题描述】:

在 Linux 上使用 netbeans 调试 C/C++ 代码时,是否可以像 Windows 上的 Visual Studio 一样“进入”本机 C 运行时库(查看 malloc() 等的源代码)?

如果没有,任何 Linux IDE 都可以吗?

【问题讨论】:

  • Virual Studio 是否显示malloc的源代码?!

标签: c++ c linux debugging netbeans


【解决方案1】:

malloc 和许多函数都有编译器的特定实现。通常你无法通过这种方式访问​​它们的源代码。例如在 gcc/g++ 中,malloc<cstdlib> 中声明,并在.dll 文件中作为外部函数实现。

在 Visual Studio 中,您可以查看一些声明并看到一些奇怪的代码,但它们只是调用 real malloc 的一些高级代码。看不到malloc的真正实现。

例如,在我进入malloc 后的测试中,我看到下面的代码只是对内部函数的调用,等等……最后你什么也看不到:

extern "C" _CRTIMP void * __cdecl malloc (
        size_t nSize
        )
{
        void *res = _nh_malloc_dbg(nSize, _newmode, _NORMAL_BLOCK, NULL, 0);

        RTCCALLBACK(_RTC_Allocate_hook, (res, nSize, 0));

        return res;
}

【讨论】:

  • 这看起来不像 Linux malloc!
  • @BasileStarynkevitch:实际上是 MinGW 的 malloc。这只是一个例子来说明我的观点。
【解决方案2】:

如果在 Debian 或 Ubuntu(或派生的)发行版上,您可以安装 libc6-dbg(或 libc-dbg)软件包。

然后使用gdbset debug-file-directory命令

而且由于Linux是免费软件,你可以研究一下malloc的源码;您的发行版可能使用了GNU libc 的一些补丁变体;你也可以看看MUSL libc,它的源代码对我来说似乎更具可读性。

FWIW,malloc(3) 肯定在使用诸如 mmap(2) 之类的系统调用...

在许多发行版上,您可以从源代码重建打包软件(例如使用apt-build...)

但如果你是新手,我不建议重建libc,因为它是几乎所有应用程序的核心部分!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多