一、概述
在Valgrind下运行的程序不是由CPU直接执行的。相反,它运行在Valgrind提供的合成CPU上。这就是调试器在Valgrind上运行时无法调试程序的原因。
二、快速入门
在使用Memcheck工具时使用GDB调试程序,启动方式如下:
1、valgrind --vgdb = yes --vgdb-error = 0 可执程序
2、在另一个shell中,启动GDB:gdb 可执程序
3、将以下命令提供给GDB:(gdb) target remote | vgdb
现在可以调试程序了,例如插入断点然后使用GDB continue 命令。
三、远程调试gdbserver
1、gdbserver的原理
本地调试:GNU GDB调试器通常用于调试在同一台机器上运行的进程。在此模式下,GDB使用系统调用来控制和查询正在调试的程序。
远程调试:GDB还可以调试在不同计算机上运行的进程。为此,GDB定义了一个协议(即一组查询和回复数据包),它有助于获取内存或寄存器的值,设置断点等.gdbserver是这种“GDB远程调试”协议的实现。要调试在远程计算机上运行的进程,必须在远程计算机端运行gdbserver
2、Valgrind中的gdbserver
Valgrind核心提供了一个内置的gdbserver实现,它使用–vgdb=yes 或–vgdb=full来激活。此gdbserver允许在Valgrind的合成CPU上运行的进程远程调试。GDB将协议查询数据包&
如果觉得《【linux】Valgrind工具集详解(六):使用Valgrind gdbserver和GDB调试程序》对你有帮助,请点赞、收藏,并留下你的观点哦!