在 Linux 上使用 netbeans 调试 C/C++ 代码时,是否可以像 Windows 上的 Visual Studio 一样“进入”本机 C 运行时库(查看 malloc() 等的源代码)?
如果没有,任何 Linux IDE 都可以吗?
如果在 Debian 或 Ubuntu(或派生的)发行版上,您可以安装libc6-dbg
(或)软件包。libc-dbg
然后使用set debug-file-directory命令gdb
而且由于 Linux 是免费软件,你可以研究 ; 的源代码malloc
。您的发行版可能使用了一些GNU libc的补丁变体;您还可以查看MUSL libc,它的源代码对我来说似乎更具可读性。
FWIW,malloc(3)肯定在使用诸如mmap(2)等系统调用...
在许多发行版上,您可以从源代码重建打包软件(例如apt-build
...)
但如果你是新手,我不建议重建libc
,因为它是几乎所有应用程序的核心部分!
malloc
很多函数都有编译器的具体实现。通常你无法通过这种方式访问它们的源代码。例如在 gcc/g++ 中,在文件malloc
中声明<cstdlib>
并实现为外部函数.dll
。
在 Visual Studio 中,您可以查看一些声明并看到一些奇怪的代码,但它们只是一些高级代码来调用真正的 malloc
. 你看不到真正的实现malloc
。
例如,在 step into 之后的测试中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;
}