一、概述
在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远程调试”协议的实现。要调试在远程计算机上运行的进程,必须在远程计算机端运行gdbserv