如何让Valgrind调试器逐步完成程序

时间:2011-02-09 13:37:30

标签: c++ valgrind

早上好,我正在尝试使用Valgrind调试器来完成一个程序。

我的valgrind命令行是valgrind -tool memcheck --leak-check=full --db-enable=yes ./MatchUpAcurate.exe.

我在Centos Linux 5.5版上使用valgrind-3.5.0和gdb版本7,0.1-23.el5_5.2。

当valgrind询问附加到调试器的问题时,我输入Yes。然后,valgrind调试器返回:4428: return new tuple2<int,A>(2, i++, p->next());

当我尝试使用gdb步骤或继续命令时,valgrind说

[New Thread 0x410fd10 (LWP 6548] Cannot find user-level thread for LWP 6551: generic error.

当我尝试在valgrind命令行上使用valgrind --single-step=yes调试器选项时,valgriind说Bad option aborting

任何valgrind用户都能告诉我如何单步执行C ++源代码或继续完成程序吗?谢谢。

2 个答案:

答案 0 :(得分:13)

我问valgrind开发人员如何创建valgrind调试器。这是他们所说的;

  1. 从valgrind网站下载3.6.0源文件。

  2. 然后你必须应用错误214909中的补丁。

  3. 正确编译后,您可以像这样启动应用程序:

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

    然后在另一个窗口中:

    gdb ./prog
    target remote | vgdb
    
  4. 不要启动外部gdbserver:补丁的作用是在valgrind中集成gdbserver。 这个集成在valgrind中的gdbserver由--vgdb = yes。

  5. 激活

答案 1 :(得分:11)

您还可以在3.7.0版本中获取vgdb。从发行说明:

  • GDB服务器:Valgrind现在有一个嵌入式GDB服务器。这意味着它 可以控制从GDB运行的Valgrind,完成所有常规操作 GDB可以做的事情(单步,断点,检查 数据等)。还提供特定于工具的功能。对于 例如,可以查询变量的定义状态 运行Memcheck时从GDB内部或内存;任意大 支持内存观察点等。要使用GDB服务器,请启动 Valgrind带有标志--vgdb-error = 0并按照屏幕上的说明操作 指令。

valgrind在线手册中有更多信息。