vs2019 - 使用IDA定位已经被捕获的异常

news2024/11/28 7:34:48

文章目录

    • vs2019 - 使用IDA定位已经被捕获的异常
    • 概述
    • 笔记
    • 备注
    • 补充
    • 备注
    • END

vs2019 - 使用IDA定位已经被捕获的异常

概述

正在测试程序的功能, 用VS2019开着调试版跑起来. 发现程序关闭后, 在VS2019的输出窗口发现了C++异常的信息, 还不是一条.
在这里插入图片描述
虽然不影响程序的运行, 但是心里膈应.
这种异常发生了, 但是没被VS2019断下来, 说明这4个C++异常是在工程中被try-catch住的.
我现在这个程序, 主动使用try-catch的地方不多. 如果在每个try-catch住的地方下断点倒是可以.
但是为了普遍性, 还是要找出一种不依赖断点无脑排错的调试方法.

笔记

将debug版编译好, 用IDA带着跑起来.
用IDA载入EXE时, 因为是载入的Debug版程序, 连同PDB一起载入.
选择本地调试器
在这里插入图片描述
跑起来.
进行一样的操作, 发现IDA断住异常了:)
在这里插入图片描述
按确定后, 让程序自然暂停住.
打开栈调用链窗口
在这里插入图片描述
在这里插入图片描述
因为出了异常, 栈调用链不是很准.
但是能看到最上层的函数是COrderOperation::static_thread_dispatch().
那现在就可以有的放矢了, 关掉IDA.
只在COrderOperation::static_thread_dispatch()上下断点.
然后重新用VS2019跑程序, 到了发现报错的疑似顶层函数, 步入, 然后步过, 看看执行过那步, 会在VS2019输出窗口显示被捕获的异常信息.
如此这般, 就会很快缩小排查范围. 最后定位并修复问题.

我这里发下的问题是, 删除文件的函数做了try-catch, 如果删除了不存在的文件, 就会抛异常, 并被函数内的catch捕获住. 修正如下:

bool CFileOperation::Delete(CString sPathName)
{
	try {
		// 如果文件存在, 才删除, 防止出异常.
		// 虽然这里被catch住了, 总的来说不好
		if (!this->IsFileExist(sPathName))
		{
			return true;
		}

		DoDelete(sPathName);

	} catch (CFExeption* e) {
		m_sError = e->GetErrorText();
		m_dwError = e->GetErrorCode();
		delete e;

		if (m_dwError == 0) {
			return true;
		}

		return false;
	}

	return true;
}

备注

虽然被try-catch住的异常, 不会引起程序的功能出问题. 但是也说明可能哪里出了问题, 如果能在逻辑上将异常搞定, 让他不出异常, 感觉更好一点.

修正完后, 又跑了一次, 程序退出后, 在VS2019的输出窗口没有任何发生c++异常的提示信息了:P

补充

又想了一下, 既然是自己try-catch, 那么自然知道是哪里catch的, 为何不在catch中, 用框架提供的功能, 整点动静出来, 这样, 也不用第三方调试器辅助调试了.
在这里插入图片描述
在VS2019Debug版程序退出后, 如果在输出窗口看到自己catch住的打印信息的输出, 双击就可以定位到catch住异常的地方了.
这属于自己编码不规范引起的问题.

当然, 发现异常后, 如果有可能修复, 还是要修复.

备注

这种用IDA来辅助定位问题的方法, 对于自己的工程可能有点脱裤子放屁的感觉.
但是对于自己接手维护的不规范工程(e.g. 不是自己写的工程(刚接手, 还没深入理解), 开源工程(代码行数大, 看不过来, 刚接触的工程, 逻辑理解的有点懵懂), 遗留的烂工程(可能就是自己以前写的工程)), 还是管点用.

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1341527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

平升电子水库监管平台SQL注入漏洞复现

0x01 产品简介 唐山平升电子水库监管平台通过实时监测、数据分析、预警系统和远程控制等功能,为水库管理部门提供了一种全面、高效的数字化解决方案,帮助他们更好地管理和监控水库,确保水库的安全运行。 0x02 漏洞概述 唐山平升电子水库监…

Mediapipe绘制实时3d铰接骨架图——Mediapipe实时姿态估计

一、前言 大约两年前,基于自己的理解我曾写了几篇关于Mediapipe的文章,似乎帮助到了一些人。这两年,忙于比赛、实习、毕业、工作和考研。上篇文章已经是一年多前发的了。这段时间收到很多私信和评论,请原谅无法一一回复了。我将尝…

低代码平台在金融机构应用的优势介绍

金融服务领域的数字创新项目极其复杂。在整个行业中,公司都因缺乏资源和过时且不灵活的核心系统而受阻。当面对一连串的合规和维护相关要求时,创新感觉就像一个遥远的梦想。但低代码应用程序开发可实现金融服务的数字创新,通过更简单、更快和…

数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)

目录 1、概述 2、环境准备 3、读写分离实验 3.1、安装jdk 3.2、安装Mycat 3.3、配置Mycat 3.3.1、配置schema.xml ​​​​3.3.2、配置server.xml 3.4、修改主从机远程登陆权限 3.4.1、主机 3.4.2、从机 3.5、启动Mycat 3.6、登录Mycat 3.7、验证 1、概述 读写分…

每日一题(LeetCode)----二叉树--二叉树的层平均值

每日一题(LeetCode)----二叉树–二叉树的层平均值 1.题目(637. 二叉树的层平均值) 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1: 输入:root […

【C语言】数据结构——排序(一)

💗个人主页💗 ⭐个人专栏——数据结构学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读:数组打印与交换1. 插入排序1.1 直接插入排序1.1.1 基本思想1.1.2 实现代码1.1.3 图解 1.2 希尔排序1.2.1…

计算机视觉与自然语言处理(Open AI)

1.语音识别技术 语音识别是将语音转换为文本的技术, 是自然语言处理的一个分支。通过特征的提取、模式的匹配将语音信号变为文本或命令,以实现机器识别和理解语音。 按照应用场景的不同,可以大致分为三类; • 电信级系统应用&…

HBase基础知识(四):HBase API

HBase还提供了API&#xff0c;我们可以通过编程的方式来进行对HBase的操作。 1. 环境准备 新建项目后在 pom.xml 中添加依赖&#xff1a; <dependencies><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-server</artifa…

首次使用TypeScript,报错:无法重新声明块级范围变量(声明变量报错)

前几天在书写TypeScript代码时&#xff0c;出现了声明变量报错的情况&#xff0c;具体情况如下&#xff1a; let arr: number; arr 10; console.log(arr);报错如下&#xff1a; 解决方案&#xff1a; 在配置文件tsconfig.json中&#xff0c;配置如下代码&#xff1a; { &q…

STM32F407-14.3.10-表73具有有断路功能的互补通道OCx和OCxN的输出控制位-1x000-1x111(总结)

基于表73中&#xff0c;主输出使能&#xff08;MOE1&#xff09;的8种OCx与OCxN的输出状态及波形图&#xff0c;已经单独整理输出8篇文章&#xff0c;方便需要时单独回查。 主输出使能时&#xff08;MOE1&#xff09;总结如下 通过表73中可得以下结论 1、控制位1x000与1x100…

[玩转AIGC]LLaMA2之如何跑llama2.c的chat模式

前言&#xff1a;之前我们关于llama2的相关内容主要停留在gc层面&#xff0c;没介绍chat模式&#xff0c;本文将简单介绍下llama2.c的chat模式如何跑起来。训练就算了&#xff0c;没卡训练不起来的&#xff0c;但是用CPU来对别人训练好的模型进行推理还是绰绰有余的&#xff0c…

2023-12-29 服务器开发-centos-安装php8

摘要: 2023-12-29 服务器开发-centos-安装php8 centos-安装php8 必备条件 Minimal CentOS 8 / RHEL 8User with sudo rightsInternet Connection (1) 更新系统 更新系统 $ sudo dnf update $ sudo dnf upgrade 重启系统 $ sudo reboot (2) 启用 EPEL & Remi 软件库…

Pycharm引用其他文件夹的py

Pycharm引用其他文件夹的py 方式1&#xff1a;包名设置为Sources ROOT 起包名的时候&#xff0c;需要在该文件夹上&#xff1a;右键 --> Mark Directory as --> Sources ROOT 标记目录为源码目录&#xff0c;就可以了。 再引用就可以了 import common from aoeweb impo…

lv13 内核模块动态添加新功能 6

1 动态加载法 即新功能源码与内核其它源码不一起编译&#xff0c;而是独立编译成内核的插件(被称为内核模块&#xff09;文件.ko 1.1 新功能源码与Linux内核源码在同一目录结构下时 给新功能代码配置Kconfig&#xff08;模块代码与上一级相同&#xff09; 给新功能代码改写…

2023年12月28日学习记录

目录 1、今日计划学习内容2、今日学习内容文献阅读—A Data-driven Base Station Sleeping Strategy Based on Traffic Prediction0、选这篇文章的原因1、文章的主要内容和贡献2、使用的数据集3、结果及分析4、郭郭有话说 整理流量预测的代码 3、今日学习总结 1、今日计划学习内…

[枚举涂块]画家问题

画家问题 题目描述 有一个正方形的墙&#xff0c;由N*N个正方形的砖组成&#xff0c;其中一些砖是白色的&#xff0c;另外一些砖是黄色的。Bob是个画家&#xff0c;想把全部的砖都涂成黄色。但他的画笔不好使。当他用画笔涂画第(i, j)个位置的砖时&#xff0c; 位置(i-1, j)、…

【ES】Elasticsearch常见问题与解决(持续更新)

目录 Elasticsearch常见问题 1. 集群健康问题 2. 性能问题 3. 映射问题 4. 分片问题 5. 内存问题 6. 硬件问题 7. 配置问题 8. 安全问题 9. 网络问题 10. 版本不兼容 Elasticsearch日常使用小结 【Q】离线告警&#xff0c;有IP已离线 【Q】统计某个应用的某个索引…

tcp 乱序度量与丢包标记

传统 tcp 以序列号差度量乱序&#xff0c;比如 1, 2, 3, 4, 6, 7, 8, 5 这个序列的 5 延后了 3 个段&#xff0c;就称这个序列的乱序度为 3。 如果乱序度为 m&#xff0c;则序列 n, n 1 k, n 1 k r, …, n 1 k r x 中&#xff0c;只要 (n 1 k r x) - (n 1) k …

maven中dependencyManagement标签

简介 dependencyManagement正如其名&#xff0c;用于项目依赖的统一管理。 在父项目中的pom.xml文件中加入dependencyManagement标签即可完成依赖版本的声明。在声明完成后&#xff0c;子项目&#xff08;module&#xff09;中引用相同的依赖时可以不指定version标签自动引入…

音频修复和增强软件:iZotope RX 10 (Win/Mac)中文汉化版

iZotope RX 是一款专业的音频修复和增强软件&#xff0c;一直是电影和电视节目中使用的行业标准音频修复工具&#xff0c;iZotope能够帮助用户对音频进行制作、后期合成处理、混音以及对损坏的音频进行修复&#xff0c;再解锁更多功能之后还能够对电影、游戏、电视之中的音频进…