摘要:背景 在开发项目的一个feature时,发现有一个线程hang住,一直无法向元数据管理模块发送心跳,导致线程所在的机器被drop掉,组里的一个同学使用gdb找到了hang住的原因,于是自己也决定学一下这种方法。 测试程序 启动两个线程,竞争互斥锁,其中一个线程拿到锁之后不释放,两个线程因为死锁必然会
阅读全文
随笔分类 - 异常诊断与调试
摘要:目录 1.首先编写python调用C++的demo 2.gdb调试python程序 3.全速运行程序 4.查看堆栈信息 当我们用Python调用C++的库,并且C++库中存在段错误崩溃时,首先想到的还是用gdb进行调试,具体使用方法如下: 使用该方法的前提是编译C++库的时候要加上-g选项,使编译出
阅读全文
摘要:python卡死了怎么办? 一般的python程序卡死,可以用pycharm debug。但是有时候是python和c/c++库混合开发,比如pyqt或者boost python程序卡死,就非常难查。以前都是二分法注释代码查找问题,异常低效。 于是我尝试了vs2017的新功能:python & c+
阅读全文
摘要:说明: 当我们的python程序的一些函数的后端实现为C++时(比如Pytorch, TensorFlow或tvm等)可以使用当前方法调试。有两种方式可以安装调试环境: 一. 搭建环境 有两种方式搭建环境,第一种是用apt安装dbg包,第二种方式是编译python源码。 1.1 安装python的d
阅读全文
摘要:参考嵌入式gdb+gdbserver调试环境搭建与使用 参考嵌入式VSCode+gdbserver图形化调试环境搭建与使用 参考VS Code + gdbserver 嵌入式arm远程调试 参考step by step 使用gdb调试Linux平台应用程序 一、软件准备 交叉编译软件gcc-lina
阅读全文
摘要:目录标题 引言 环境 步骤 vscode remote ssh 配置 Linux编译机配置 设备板端配置 vscode launch设置 调试 引言 之前说了,通过core dump找程序bug,但是有些时候排查问题的还是不够高效,命令行形式gdb还是太简陋了,在IDE debug代码打断点,查堆栈
阅读全文
摘要:嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。调试时,应用程序在嵌入式目标系统上运行,而gdb调试在Host端。 一、编译安装gdb+gdbserver 首先下载gdb源码,我下载的是g
阅读全文
摘要:1、调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer。在应用程序调试的时候,pc机上的gdb向开发板上的GDBServer发出命令,而开发板上的gdbserver就会向应用程序发出信号,使应用程序停下来或者完成
阅读全文
摘要:众所周知,linux下进程当收到某些信号而终止时,会保存进程上下文信息进入coredump文件中;以帮助程序员们分析调试。它可以通过执行如下命令使能coredump生成。其生成路径定义在/proc/sys/kernel/core_pattern文件中,生成文件名格式定义在内核源码的Documenta
阅读全文
摘要:什么是core dump? Coredump叫做核心转储,它是进程运行时在突然崩溃的那一刻的一个内存快照。操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存、寄存器状态、运行堆栈等信息转储保存在一个二进制文件里。 设置core dump文件大小,默认0,即不会生成core文
阅读全文
摘要:文章目录 1、使用windbg中的umdh检查 1.1、 工具下载 1.2、环境配置 1.3、利用工具umdh(user-mode dump heap)分析 1.4、利用umdh创建heap快照 2、使用windbg中的htrace检查 2.1、准备工作 2.2、快照 2.3 、执行操作,比较差异
阅读全文
摘要:想要知道程序从开始到运行一段时间内存的使用情况,可以使用gflags工具。 1. windbg同级目录下有gflags.exe,点开后进行如下设置。 2. 在gflags.exe的目录下直接打开命令窗口 输入gflags /i myTest.exe +ust set _NT_SYMBOL_PATH=
阅读全文
摘要:内存泄漏 1、方法一:批处理 umdh 原理:借助winDBG 工具,先设置好pdb路径,然后加入进程,运行进程,抓取第一次快照(Snap1.log );运行一段时间(让内存增长),然后执行内存泄漏检测分析.bat,抓取第二次快照(Snap2.log)。最终,比较两次快照结果存到result.txt
阅读全文
摘要:在大型项目中,内存泄露并不会立即crash,会使系统性能不断下降,甚至因内存耗尽而崩溃。排查起来难度也比较大,申请内存的地方很多。这里介绍的这种方法可以迅速定位问题。 下面的程序crash64,每秒会申请1M的内存,而一直都没有释放,产生内存泄露 windbg 中有个小工具 UMDH可以追踪系统每个
阅读全文
摘要:本篇文章参考链接: http://bbs.pediy.com/showthread.php?t=107893 ,作者:dnapcex。 windbg安装文件链接:下载地址 最近在查找内存泄露时又偶遇windbg,依然碰到当时纠结的符号表问题。之前公司不能上外网,符号表问题实在不好弄,当时驱动算是做完
阅读全文
摘要:在使用WPA分析性能的时候,发现一款轻量级的内存泄露分析工具UMDH(User-Mode Dump Heap),现在研究实践如何使用该工具进行内存泄露分析 Umdh 是 Debugging Tools for Windows 里面的一个工具,主要通过分析比较进程的Heap Stack trace信息
阅读全文
摘要:A.利用工具umdh(user-mode dump heap)分析:此处以程序MemoryLeak.exe为例子 1、开启cmd 键入要定位内存泄露的程序gflags.exe /i memroyleak.exe +ust,如图成功后,开启memoryleak.exe程序。 2、利用UMDH创建Hea
阅读全文
摘要:缘起: 作为C++程序员,检测内存泄漏是非常痛苦的事情。尤其是看着程序的内存在一直增长,你却无能为力。此时,windbg可以用来检测内存泄漏。 配置windbg: 配置symbol文件路径: “SRV*d:\symbols*http://msdl.microsoft.com/download/sym
阅读全文
摘要:一、简介 生产环境偶尔会出现一些异常问题,WinDbg 或 GDB 就是解决此类问题的利器。调试工具 WinDbg 如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具,Dump 文件类似于飞机的黑匣子,记录着生产环境程序运行的状态。 本文主要介绍了调试工具 WinDbg 和抓包工具 ProcDu
阅读全文
摘要:1. 如何生成dump文件? 原理:通过SetUnhandledExceptionFilter设置捕获dump的入口,然后通过MiniDumpWriteDump生成dump文件; SetUnhandledExceptionFilter:https://msdn.microsoft.com/query
阅读全文