Linux上的Netbeans C / C ++“介入”Linux C运行时代码?

时间:2013-10-29 13:09:23

标签: c++ c linux debugging netbeans

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

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

2 个答案:

答案 0 :(得分:0)

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;
}

答案 1 :(得分:0)

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

然后使用gdb

set debug-file-directory命令

由于Linux是免费软件,因此您可以学习malloc的源代码;您的发行版可能使用GNU libc的某些修补变体;您也可以查看MUSL libc,其源代码对我来说更具可读性。

FWIW,malloc(3)当然正在使用mmap(2)等系统调用...

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

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