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

Fra*_*ank 11 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提出问题Attach to Debugger时,我输入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 --single-step=yes在valgrind命令行上使用调试器选项时,valgriind说Bad option aborting.

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

Fra*_*ank 13

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

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

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

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

    valgrind --vgdb=yes --vgdb-error=0 ./prog
    
    Run Code Online (Sandbox Code Playgroud)

    然后在另一个窗口中:

    gdb ./prog
    target remote | vgdb
    
    Run Code Online (Sandbox Code Playgroud)
  4. 不要启动外部gdbserver:补丁的作用是在valgrind中集成gdbserver.这个集成在valgrind中的gdbserver由--vgdb = yes激活.


Use*_*abc 11

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

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

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