首页 > 编程语言 >C++开发调试工具:GDB调试,windebug调试,adb调试

C++开发调试工具:GDB调试,windebug调试,adb调试

时间:2024-07-06 17:29:01浏览次数:14  
标签:文件 shell C++ GDB adb test 调试 设备

我们在C++开发过程中时常避免不了要调试追踪,一下介绍最主流的三种调试工具:

一.GDB调试

1.coredump文件:
coredump文件是程序异常时系统产生的错误日志文件,即核心转储文件;
编译一个debug程序,必须是debug版本,否则无法产生coredump文件;
编译命令:g++ test.cpp -o mytest -g,必须要加上"-g"才能生成由debug info的文件;
执行程序直至崩溃,让其产生coredump文件;
2.GDB命令调试:
安装GDB命令:sudo apt-get install gdb下载,执行…/configure,执行make j4,执行sudo make install安装
GDB常用命令:run,break,continue,frame,list,next等
调用GDB命令:gdb mytest core.2222
查看调用堆栈命令:bt 来看到崩溃时执行的程序行
切入出问题的堆栈中命令:f 0(f加上堆栈编号)看以看到当时执行的程序代码行,确认出问题的点
查看对应的指针命令:p ptr(指针名称) 可以看到该指针为空等原因

二.windebug调试

安装windebug,控制面板 -> 程序 -> Windows Software Development Kit -> 右键选择更改 -> change -> 勾选Debugging Tools For Windows -> 安装;
为进程创建转储文件(dmp),既可以在任务有管理中选中进程 -> 右键 -> 创建转储文件;
运行要调试的程序;
打开windebug工具,菜单栏选择"file",“Attach to Process”;
选择要调试的目标程序;
附加;
附加后程序会被暂停,这时候需要使用Debug中go、step out、stepover等命令让程序继续执行,直到出现异常,Windbg会检测出异常,并停止;
windbg发现异常并中断,然后输入:.dump /f e:dump/XXXX.dmp,来生成全信息的dmp文件;

三.adb调试

1.介绍
adb全称Android Debug Bridge是C/S模式的桥接调试工具,可以上传/下载文件,运行设备shell命令,对设备安装和卸载应用等功能,主要用于andriod调试,也支持Linux嵌入式设备调试;
2.安装adb
adb支持Windows和Linux,在adb官网下载;
Windows上解压后设置系统环境变量指向解压释放的目录,如下:
(1)本人将adb包解压在“E:\software\platform-tools”目录
ADB解压目录
(2)设置环境变量:此电脑->属性->高级系统设置->高级->环境变量
在这里插入图片描述

接下来点击系统环境变量里的“path”,设置环境变量路径。
在这里插入图片描述
(3)验证adb
在这里插入图片描述
在cmd工具上输入 adb version获取版本号来验证adb是否有效
在这里插入图片描述

3.连接使用
通过数据线连接开发板;
打开cmd命令窗口,即可使用adb命令调试设备;
输入adb devices 检测是否有设备连接,以下说明有一个设备连接的。
在这里插入图片描述

4.常用命令

adb verison //显示adb版本;
adb help //帮助信息;
adb devices //查看当前已连接的设备列表;
adb root //获取root权限;
adb -s 2121212121 shell //与设备号为2121212121 的设备建立连接;
adb shell //当只有一个设备连接到电脑时,可直接使用adb shell与设备建立连接
exit //退出设备连接;
adb -p 6666 start-server //指定6666端口来启动设备adb服务;
adb shell pm list packages //列出当前设备中所有的包名;
adb install -r <文件路径\apk> //覆盖式安装apk包;
adb push C:\user\test /usr/local/ //将C盘下的test文件拷贝到设备的usr/local目录下;
adb pull /usr/local/test.txt C:\user\test  //将设备上 usr/local目录下的test.txt文件,拷贝到电脑C盘下的test文件夹;
adb shell getprop ro.product.model //获取设备型号;

标签:文件,shell,C++,GDB,adb,test,调试,设备
From: https://blog.csdn.net/qianniulaoren/article/details/140197419

相关文章

  • C++中的设计模式
    要搞清楚设计模式,首先得要了解UML中的类的一些关系模型。一.UML图中与类的层次关系UML关系:继承关系(泛化关系);组合关系;聚合关系;关联关系;依赖关系;以上关系强度依次减弱。1.继承关系继承关系是最直接的父子关系,如麻雀和老鹰都继承自鸟类,属于子类继承自父类,所以UML中子类实......
  • 详解C++完美转发
    我们先来看折叠规则引用折叠规则在C++中,引用折叠规则的主要目的是为了保证在模板推导过程中,对于参数T&&能够正确地推导出其最终的引用类型,以便进行参数传递时的正确行为。下面是引用折叠规则的总结:左值引用折叠:T&&折叠为T&T&&&折叠为T&这意味着如果一个左值引用......
  • SM5308调试问题以及解决办法
     第一版pcb打板后测试整体电路,只有sm5308充电管理芯片出问题,无法开机通电,输出也不稳定,时好时坏,只有在接上usb充电后才能正常工作。这个芯片在之前做的迷你充电宝方案中是没问题的,才将它移植到毕设上,所以电路图也是没问题的。测试时采用多种方案,先是对比可以使用板子和新焊接......
  • C++语言常见错误分析汇总
    在一个工程里出现两个main函数时3.obj:errorLNK2005:_mainalreadydefinedinfile1.objDebug/HELLO.exe:fatalerrorLNK1169:oneormoremultiplydefinedsymbolsfound这个就是说,你的main函数重定义了。你看看是不是你的工程里面,包含了很多个有main函数的文件?......
  • c++基础知识——常量和变量
    常量1.常量的性质在程序运行的过程中,其值不改变的量称为常量。常量分为两种:一类直接写出它的值,称为字面值常量,如123,'abc',true等;一类是使用const修饰的对象。2.整形字面值常量整形字面值常量采用我们平常使用的十进制整数表示。如138,0,-512等,都是整形常量,二18.1,32.6等不是整......
  • 【C/C++ new/delete和malloc/free的异同及原理】
    new/delete和malloc/free都是用于在C++(以及C语言在malloc/free的情况下)中动态申请和释放内存的机制,但它们之间存在一些显著的异同点。以下是对这两组函数/运算符的异同点的详细分析:相同点目的相同:两者都用于在堆(heap)上动态地分配和释放内存。手动管理:无论是new/delete还是......
  • 快速排序c++&&java代码实现
    快速排序的思想(基于分治法): 每次选一个基准元素x,通过一次遍历将排序表划分为独立的两部分a[l,k-1],a[k+1,r];其中左边的元素<=x,右边的1元素>x,然后递归下去,直到每个块的大小为1;c++#include<bits/stdc++.h>usingnamespacestd;voidquickSort(vector<int>&q,int......
  • java学习——基础语法篇(适合已经学过c++的人群)
    本篇适合之前学过c和c++语言,现在要学java的人进行学习。由于之前学习过c++同为面向对象的程序语言,基础语法在相对比之下学习,对比c++与java的差异,会快速掌握基本语法。学编程语言,语法不是重点,用时即查,编程思路才是重点。1.注释、标识符、关键字、数据类型,变量定义,运算符与c++基本......
  • 初始C++
    1.visualstudio2022创建项目以及创建C++文件完成上述步骤之后我们就可以敲代码了!!2.关于编译和链接1.ctrl+F7对当前C++文件进行编译并会在编译成功后生成.obj文件。2.F5运行整个项目就会将一个项目下的所有C++文件进行编译再将编译后生成的.obj文件链接起来生......
  • 工具|--LINQPad|--使用DnSpy调试LINQPad
    前言LINQPad本身就有调试功能,使用dnSpy调试LINQPad的代码,岂不是多此一举?其实主要是为了使用dnSpy调试LINQPad中使用到依赖dll的的底层代码,比如,在LINQPad中使用到了WPF的dll,使用dnSpy就可以调试到WPF的一些底层代码.并且,我尝试过,直接使用dnSpy加载LINQPad......