代码之家  ›  专栏  ›  技术社区  ›  jeffreyveon

GDB:在内存位置打印函数参数的值

  •  0
  • jeffreyveon  · 技术社区  · 7 年前

    我正在使用Valgrind和GDB调试内存泄漏。我有以下显示内存泄漏发生位置的调用跟踪:

    (gdb)  monitor block_list 10104
    ==961== 153 (18 direct, 135 indirect) bytes in 1 blocks are definitely lost in loss record 10,104 of 10,317
    ==961==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==961==    by 0x678199: create_node(unsigned char const*, unsigned int, document*) (a.cpp:436)
    ==961==    by 0x67933A: insert(art_node*, art_node**, unsigned char const*, unsigned int, document*, unsigned int, int, int*) (a.cpp:704)
    ==961==    by 0x68327B: Program::add(std::string const&) (program.cpp:84)
    ==961==    by 0x7220BF: main (main.cpp:52)
    

    我想打印传递给的字符串参数的值 Program::add 在:

    ==961==    by 0x68327B: Program::add(std::string const&) (program.cpp:84)
    

    我如何在GDB中做到这一点?

    1 回复  |  直到 7 年前
        1
  •  1
  •   ks1322    7 年前

    你可以循序渐进 Valgrind manual :

    如果您想在使用Memcheck工具时使用GDB调试程序, 从下面开始:

    valgrind --vgdb=yes --vgdb-error=0 prog
    

    在另一个shell中,启动GDB:

    gdb prog
    

    然后向GDB发出以下命令:

    (gdb) target remote | vgdb
    

    Program::add(std::string const&) 在gdb中打印参数值。