如何在GDB中调用operator new[]进行内存分配并打印地址?
解决GDB中调用operator new[]报错的问题
当你在GDB中执行p (void*)operator new[](0x40)时出现No symbol "operator" in current context.错误,可通过以下方法解决:
显式指定std命名空间
C++的operator new[]属于std命名空间,默认情况下GDB不会自动导入该命名空间,因此需要显式限定:p (void*)std::operator new[](0x40)直接使用名字修饰后的符号
如果上述命令仍失败,可能是GDB未正确解析C++名字修饰后的符号。先查询operator new[]的实际符号名:info functions operator new[]输出中会显示类似
_Znaj(GCC/Clang下的new[]修饰名)的符号,直接调用该符号:p (void*)_Znaj(0x40)确保编译时保留调试信息
若编译程序时未添加调试选项,GDB无法正确识别C++标准库符号。重新编译时加上-g或-ggdb选项:g++ -g your_program.cpp -o your_program切换到C++上下文执行命令
如果当前GDB处于纯C代码或未加载C标准库符号的上下文,也会找不到operator new[]。先在程序的C函数处设置断点并运行到该位置,确保当前环境已加载C++标准库符号后再执行分配命令。
内容的提问来源于stack exchange,提问作者vtable
相关产品推荐
相关产品推荐

