程序调试

在2440上用GDB调试linux内核

匿名 (未验证) 提交于 2019-12-02 21:56:30
前面的文章介绍了如何用ADS调试uboot,把uboot调通以后,引导linux,却发现怎么都没有打印log输出。ADS在打开mmu做过页面映射以后就无法追踪调试下去了,所以得用其他的方法进行追踪调试。网上有好多说可以用openocd来进行调试,也尝试了下这个方法,发现不好配置,连不上调试板,最终使用Jlink gdb成功调试,不过网上的资料都比较分散,这边做个笔记方便日后翻看。 我这边是在ubuntu上面进行调试的,所以需要先在ubuntu中安装jlink 驱动,找到一种感觉最小白的方法来安装jlink驱动: https://blog.csdn.net/chile19/article/details/78980665 防止链接失效,把网址内容也贴下: 关于在Ubuntu安装JLink驱动的最简便方法 1、在JLink官网下载deb后缀,https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack 2、下载好后,复制到vmware的共享目录中 3、在ubuntu中,复制到家目录 4、直接打开“Files”图标,找到复制过来的deb文件,双击,然后选 install,就ok了 安装好jlink驱动以后,默认是安装在/opt/SEGGER/Jlink下面 在虚拟机上面,把jlink连接到虚拟机里面:

delphi 各新版本特性收集

久未见 提交于 2019-12-02 20:10:01
增强的数据库浏览器 BDP 数据提供者相应的数据库浏览器已经在几个地方作了增强。 现在可以简单的将数据从一个BDP数据提供者迁移到另外一个,这个功能能够允许你将一个数据表从一个BDP数据提供者复制另外一个上面. 这样会复制和重新建立复制目标数据表的元数据, 即使这个数据根本就是来之不同的数据源, 如将Oracle的数据迁移到MSSQL上.这和BdpCopy控件的行为类似. 数据库浏览器还有查看额外的元数据的能力, 并且允许你直接在数据库浏览器中查看和修改数据库模型, 你能直接在裹面创建新的数据表, 修改数据表还有删除存在的数据表. 同时, 你还可以直接在数据库浏览器中拖拉一个存储过程到窗体设计器中, 这样, 将会创建一个BdpConnection(如果需要)和一个BdpCommand实例, 并且自动设置BdpCommand的参数对应到指定的存储过程. VCL和VCL.NET的数据库支持 Delphi 2005中对VCL和VCL.NET的数据库支持由BDE, dbExpress和 dbGo for ADO,以及InterBase Express(IBX)组成, 这些数据访问技术同时在于VCL和VCL.NET的项目中可用, 这样, 提供了一个无缝的升级Win32程序到.NET的方法. dbGO for ADO 在创建一个VCL.NET的应用程序, Delphi 2005

路由器漏洞调试的一些技巧

折月煮酒 提交于 2019-12-02 20:09:39
mips 指令集特性 1 没有push pop指令 2 所有指令都是32位,4字节对齐 mips 动态调试 1 IDA ./qemu-mipsel -g 23946 ./xxx IDA 上选择Remote GDB debuffer 2 gdb-multiarch qemu-mipsel -L . -g 23946 ./xxx 注意要切换到路由器文件系统根目录 gdb-multiarch ./xxx set architecture mips target remote 127.0.0.1:23946 叶子函数和非叶子函数的概念 1 如果一个函数不调用其他函数(库函数也算在内),这个函数就是叶子函数 2 区分叶子函数的概念是因为在mips中,叶子函数的返回地址在ra寄存器中,非叶子函数的返回地址存放在栈上 ,在函数开头有如下操作: sw $ra,xxx IDA 插件 mipsrop 用法 mipsrop.stackfinder() 寻找栈数据可控的 rop,建立和 a0、a1 寄存器的关系 mipsrop.summary() 列出所有的可用 rop mipsrop.system() 寻找命令执行的的rop mipsrop.find(xxx) 查找 find 函数参数的 rop,类似正则匹配 mipsrop for ida 7 a = MIPSROPFinder()

GDB调试代码

情到浓时终转凉″ 提交于 2019-12-02 18:36:55
Linux 包含了一个叫gdb 的GNU 调试程序。gdb 是一个用来调试C和C++程序的强力调试器。它使你能在程序运行时观察程序的内部结构和内存的使用情况。以下是 gdb 所提供的一些功能:它使你能监视你程序中变量的值、它使你能设置断点以使程序在指定的代码行上停止执行、它使你能一行行的执行你的代码。在命令行上键入 gdb并按回车键就可以运行gdb 了。(Windows需要安装MinGW或者CygWin并且需要配置环境变量才可以使用) GDB 命令行参数 启动 GDB: l gdb executable l gdb -e executable -c core-file l gdb executable -pid process-id (使用命令 'ps -auxw' 可以查看进程的 pid) 选项 含义 –help -h 列出命令行参数。 –exec= file -e file 指定可执行文件。 –core= core-file -c core-file 指明 core 文件。 –command= file -x file 从指定文件中读取 gdb 命令。 –directory= directory -d directory 把指定目录加入到源文件搜索路径中。 –cd= directory 以指定目录作为当前路径来运行 gdb 。 –nx -n 不要执行 .gdbinit

OI-代码调试法

好久不见. 提交于 2019-12-02 16:39:05
zhx今天在qbxt讲了这个知识点,遂整理一下. 一、环境配置(Windows7) 桌面-计算机-右键-属性-高级系统设置-高级-环境变量-(用户变量)新建 变量名:PATH,变量值:C:\Program Files (x86)\Dev-Cpp\MinGW64\bin 二、使用方法 打开代码文件夹 shift+右键,在此处打开命令窗口 三、常用命令(gdb) 编译: g++ 1.cpp -o 1.exe -g(开启调试信息) r:运行程序 b(设断点): 按行数:b 行数 (if(xxx)) (例子:b 15 if(a=15)) 按函数名:b 函数名(b print) s:进入单步执行 finish:完成当前函数(如:跳过print()的内部过程) n:直接执行完这一步(如:for循环中) c:运行到下一个断点 p a:输出变量a的值 display a:随时输出变量a的值 q:退出gdb 四、规避TLE/MLE size 1.exe:查看1.exe的占用内存(除以1024 2 即为多少M) (编译:g++ 1.cpp -o 1.exe -g) gprof 1.exe > test.out:对1.exe进行性能分析并将结果保存在test.out中 (编译:g++ 1.cpp -o 1.exe -g -pg) 性能分析结果: time:占用了百分之多少的时间 来源: https:/

gdb调试

给你一囗甜甜゛ 提交于 2019-12-02 15:16:57
文章目录 第一步 使用gdb 可执行文件的命令,进入gdb调试环境,在进行调试的时候,需要先看下代码 可以使用list或者l,可以在终端中看到代码。 注意:gcc编译的时候,需要加上-g 第二步 打断点有四种方式 1.b(reak) 函数名 2.b(reak) 行号 3.b(reak) 文件名:行号 4.b(reak) 行号 if 条件 查看断点 info break (i b) 删除断点 delete 数字(info break可以查询编号) 设置断点后,就可以让程序运行起来 运行的命令有 1.r(un) 2.c(ontinue) 3.q(uit) 单步调试 n(ext) --------- step over(进行运行过函数,不会进入) s(tep) --------- step into (跟进函数内部) f(inish)--------- step return(直接运行到函数返回) 打印数值为p(rint) 变量 可以查看变量数值 watch 变量 可以查看变量,使用c继续执行程序,当该变量发生变化的时候,会将变量 的旧值以及新数值打印到终端上 注意 在gdb调试过程中,在终端输入wi,调试会更加直观。 来源: https://blog.csdn.net/weixin_38055442/article/details/102778585

灵活对调试信息宏定义开关和printf使用方法

霸气de小男生 提交于 2019-12-02 15:07:09
我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。 比如,定义一个宏开关: #define __DEBUG 当需要调试的时候,使用语句: #ifdef __DEBUG printf(xxx); #endif 这种方式的调试,可以通过undef __DEBUG的方式让告知编译器不编译这些语句,从而不再输出这些语句。但是这种方式的麻烦之处也是显而易见的,每一条调试语句都需要使用两条宏定义来包围,这不但在代码的编写上不便,源码结构也不好看,工作量依然不小。 如果我们能够把这三条语句编程一条,那该多舒服呀~,于是,我们想到使用这样的语句: #ifdef __DEBUG #define DEBUG(info) printf(info) #else #define DEBUG(info) #endif 这样,我们在编写代码的时候,使用DEBUG一条语句就可以了,我们把宏开关__DEBUG打开,所有的DEBUG(info)宏定义信息都会被替换为printf(info),关上则会被替换成空

warning C4273: ****.dll链接不一致

不羁的心 提交于 2019-12-02 15:03:57
方法1: 选择项目->属性->预处理器->预处理定义, 增加:HYCOMMONWINAPI_EXPORTS 方法2: 就是在 #ifdef HYCOMMONWINAPI_EXPORTS #define HYCOMMONWINAPI_API __declspec(dllexport) #else #define HYCOMMONWINAPI_API __declspec(dllimport) #endif 前面增加 #define HYCOMMONWINAPI_EXPORTS 其实这两种方法都是增加定义 方法3:在你的dll cpp文件中把 #define HYCOMMONWINAPI_EXPORTS 加在#include <接口文件.h> 的前面 方法4:右击dll工程 -- 属性,打开属性页,展开:配置属性 -- C++ --预处理器,在预处理器定义的最后面填入:_AFXEXT,再次编译则搞掂。 以上方法逐一试下,不知道能不能帮到你。另外这种问题最好去CSDN社区去问比较好,百度上牛X的人比较少,我就经常去CSDN。 非常郁闷的是,这个问题在relaese dll时又会出现,而且,上面的第4种解决方式没有作用,其它的几种方式暂时不甚了解到底怎么操作,因为第3种方法按它的做,出错 ---------------------------------------------------

使用GDB调试将符号表与程序分离后的可执行文件

一曲冷凌霜 提交于 2019-12-02 14:58:50
环境:   Centos7.3、GCC4.8.5 适用场景:   由于调试信息比较大,通常将程序分离为可执行程序和符号信息文件,只对外发布可执行程序,需要调试时再将符号信息文件附加。 一、创建可执行程序:   use_library.cpp #include <iostream> #include "use_library.h" int main() { int res = my_library(1, 2); std::cout << "my_library:" << res << std::endl; }   CMakeLists.txt cmake_minimum_required(VERSION 2.8) project(use_libray) include_directories(/root/my_library) link_directories(/root/my_library/cmake) aux_source_directory(. DIR_SRCS) add_executable(use_library ${DIR_SRCS}) target_link_libraries(use_library my_library) 二、创建动态库:   my_library.h int my_library(int a, int b);   my_library.cpp

谷歌浏览器安装vue-devtools调试工具

不打扰是莪最后的温柔 提交于 2019-12-02 14:47:37
1.到GitHub上下载 git clone https://github.com/vuejs/vue-devtools 2.安装依赖和打包 进入目录 cd vue-devtools 安装依赖 npm i 或 cnpm i (npm较慢) 打包 npm run build 3.设置 进入谷歌的扩展程序 -》 开启开发者模式 -》 加载已解压的扩展程序 -》 选择“vue- devtools>>shells>>chrome” ,将chrome文件夹导入 ,完成即可。 来源: https://www.cnblogs.com/yuanzessrs/p/11750838.html