如何让 Valgrind 调试器单步执行程序

发布于 2024-10-16 18:16:07 字数 689 浏览 5 评论 0原文

早上好,我正在尝试使用 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(2, i++, p->next());

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

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

当我尝试使用 valgrind --single-step=yes > valgrind 命令行上的调试器选项,valgriind 说错误选项中止

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

Good morning, I am trying to use the Valgrind debugger to step through a program.

My valgrind command line is valgrind -tool memcheck --leak-check=full --db-enable=yes ./MatchUpAcurate.exe.

I am using valgrind-3.5.0 on Centos Linux release 5.5 with gdb version 7,0.1-23.el5_5.2.

I enter Yes when valgrind asks the question Attach to Debugger. Then, the valgrind debugger returns with: 4428: return new tuple2<int,A>(2, i++, p->next());

When I try to use the gdb step or continue command, valgrind says

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

When I try to use valgrind --single-step=yes debugger option on the valgrind command-line, valgriind says Bad option aborting.

Could any valgrind users show me how to step through C++ source code or continue through a program? Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心房的律动 2024-10-23 18:16:07

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

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

  2. 然后您必须应用 bug 214909 中的补丁。

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

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

    然后在另一个窗口中:

    <前><代码>gdb ./prog
    目标远程|虚拟数据库

  4. 不要启动外部 gdbserver :该补丁的作用是将 gdbserver 集成到 valgrind 中。
    valgrind 内部集成的 gdbserver 由 --vgdb=yes 激活。

I asked the valgrind developers how to create a valgrind debugger. Here is what they said;

  1. Download the 3.6.0 source files from the valgrind website.

  2. Then you have to apply the patch which is in the bug 214909.

  3. Once properly compiled, you launch your application like this:

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

    and then in another window:

    gdb ./prog
    target remote | vgdb
    
  4. Do not start an external gdbserver : what the patch does is to integrate a gdbserver inside valgrind.
    This gdbserver integrated inside valgrind is activated by the --vgdb=yes.

别理我 2024-10-23 18:16:07

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

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

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

You can also get vgdb in the 3.7.0 release. From the release notes:

  • GDB server: Valgrind now has an embedded GDB server. That means it
    is possible to control a Valgrind run from GDB, doing all the usual
    things that GDB can do (single stepping, breakpoints, examining
    data, etc). Tool-specific functionality is also available. For
    example, it is possible to query the definedness state of variables
    or memory from within GDB when running Memcheck; arbitrarily large
    memory watchpoints are supported, etc. To use the GDB server, start
    Valgrind with the flag --vgdb-error=0 and follow the on-screen
    instructions.

There's more info in the valgrind online manual.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文