You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:50:34