在Linux上使用netbeans调试C / C ++代码时,是否可以“介入”本机C运行时库(查看malloc()等的源代码),就像Visual Studio可以在Windows上一样?
如果没有,可以使用任何Linux IDE吗?
答案 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
由于Linux是免费软件,因此您可以学习malloc
的源代码;您的发行版可能使用GNU libc的某些修补变体;您也可以查看MUSL libc,其源代码对我来说更具可读性。
FWIW,malloc(3)当然正在使用mmap(2)等系统调用...
在许多发行版中,您可以从源代码重建打包软件(例如使用apt-build
...)
但如果你是新手,我不建议重建libc
,因为它是几乎所有应用程序的核心部分!