gdb常用命令大全+调试c++代码并定位问题详解

您所在的位置:网站首页 vs远程调试linux多线程属性配置 gdb常用命令大全+调试c++代码并定位问题详解

gdb常用命令大全+调试c++代码并定位问题详解

2023-06-01 07:44| 来源: 网络整理| 查看: 265

系列服务器开发

文章目录 系列服务器开发前言一、gdb是什么?二、使用步骤总结

前言 一、gdb是什么?

GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具。

gdb调试主要步骤 1.先把文件编译为可执行文件(如对test.c进行编译:gcc -g -o test test.c) 2.在终端输入gdb 后回车 3.接着输入file test 后回车,之后进入调试过程 4.调试过程,根据需要可对代码进行查看或操作

gdb app gdb attach pid (gdb) thread apply all bt 打印线程信息 (gdb) b add 挂函数断点 (gdb) b 10 if index == 3 挂条件断点 (gdb) r 运行 (gdb) disassemble add 查看汇编 (gdb) bt 打印堆栈,通过bt(backtrace)或where命令显示函数栈 (gdb) info frame 显示栈帧信 (gdb) info registers 显示寄存器 (gdb) set args 设置参数 (gdb) show args 设置参数 (gdb) info args 显示参数 (gdb) info locals 显示本地变量 (gdb) info variables 查看全局和静态变量 (gdb) p argc print打印变量argc (gdb) l (gdb) list + 后移 (gdb) list - 前移 (gdb) list 10 显示指定行 (gdb) list main 显示指定函数 (gdb) list main.cpp:5 显示指定文件指定行 (gdb) list main.cpp:main 显示指定文件指定函数 (gdb) p/x 100 16进制打印变量 (gdb) p/d 100 10进制打印变量 (gdb) set environment varname [=value] 设置环境变量。如:set env USER=hchen (gdb) show environment [varname] 查看环境变量。 (gdb) shell ls gdb运行环境下运行ls gdb指令: 1,l 显示源代码 2,b 设置断点 3,i 查看信息,如i b查看设置的断点信息 4,n 执行下条语句 5,r 运行程序 6,p 打印变量值,如p sum 打印变量sum的值 7,q 退出gdb调试 补充: break filename:linenum #在源文件filename的linenum行处停住 break filename:function #在源文件filename的function函数的入口处停住 break class::function或function(type,type) #在类class的function函数的入口处停住 break namespace::class::function #在名称空间为namespace的类class的function函数的入口处停住 查看coredump由谁产生 $ readelf -h ./core文件 $ file ./core文件 查看release调用堆栈 gdb attach pid gcore core.dump detach gdb myapp core.dump top查看进程占用率最高的进程 ps -mp pid定位到进程中cpu占用最高的线程 ps -mp 1153 -o THREAD,tid,pid pstack tid 只调试某个线程,不然打印到处都是 info threads 查看可切换调试的线程 thread tid 切换调试的线程 set scheduler-locking on 只运行当前线程 set scheduler-locking off 运行全部的线程 thread apply tid gdb_cmd 指定某线程执行某gdb命令,如thread apply tid n thread apply all gdb_cmd 全部的线程执行某gdb命令 为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。 watch *(void/int/char...... *)(内存地址)/全局变量名 rwatch 当表达式(变量)expr被读时,停住程序。 awatch 当表达式(变量)的值被读或被写时,停住程序。 info watchpoints 列出当前所设置了的所有观察点 二、使用步骤 #include #include #include std::string gName = "davit"; int add(int a,int b) { return (a+b); } int myAdd(int a,int b) { int c = 0; c =add(a,b); return c; } int main(int argc,char* argv[]) { int a =3; int b=4; int c = myAdd(3,4); int *p = nullptr; *p = 100; std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3