GDB 调试C++异常

gdb调试c++异常,系统调用,库的load,unload,信号异常等. 捕获C++异常 格式 catch throw [regexp] | catch rethrow [regexp] | catch catch [regexp] 说明 以正则表达式的方式指定感兴趣的异常. 在throw阶段捕获. $_exception获取抛出的什么异常. 无参表示捕获所有. 局限 系统依赖.遵循gnu-v3标准的c++ ABI支持这种断点. 案例 代码 #include<stdio.h> int main(){ try{.. 阅读详情
调试C++异常的两种办法:
1) 直接获取异常的相关调用函数,在相应函数处设置断点。

2) 利用gdb的catch throw/catch。(程序执行后,方有效)


(gdb) bt
#0 0x0000003cf592e2ed in raise () from /lib64/tls/libc.so.6
#1 0x0000003cf592fa3e in abort () from /lib64/tls/libc.so.6
#2 0x0000003cf86b1138 in __gnu_cxx::__verbose_terminate_handler () from /usr/lib64/libstdc++.so.6
#3 0x0000003cf86af166 in __cxa_call_unexpected () from /usr/lib64/libstdc++.so.6
#4 0x0000003cf86af193 in std::terminate () from /usr/lib64/libstdc++.so.6
#5 0x0000003cf86af293 in __cxa_throw () from /usr/lib64/libstdc++.so.6
#6 0x0000000000400e9f in test ()
#7 0x0000000000400f9d in main ()

从上述调用栈,可以得知异常由__cxa_throw ()抛出,可在该函数处设置断点,从而得知“异常出自哪里”。

上述给出的获取异常调用函数信息的方法,应该和操作系统和调试器无关,其他平台类似。

1) 直接获取异常的相关调用函数,在相应函数处设置断点。
利用前一步骤的信息,直接b __cxa_throw,即可设置有效断点。

2) 利用gdb的catch throw/catch
该方法也很通用,但有一个需要注意的地方:在程序执行之前,catch throw/catch是无效的,需要在程序执行之后(先在main处设置断点),使用catch throw才有效。



C++软件调试与异常排查:详细指南 在软件开发过程中,调试和异常排查是不可或缺的环节。本文将为你提供一份详细的指南,教你如何有效地调试和排查异常,以及提供一些常见问题的解决方案。在这个示例中,我们使用try块来包裹可能引发异常的代码,然后使用catch块来捕获和处理异常。通过在关键位置输出调试信息,你可以在运行程序时观察变量的值和程序的执行流程,从而更容易地发现问题所在。当程序停止在断点处时,你可以使用GDB的各种命令来检查变量的值、单步执行代码等。Valgrind会检测到重复释放内存的错误,并提供相应的诊断信息,帮助你找出问题所在。 阅读详情

相关推荐

告别sgmediation!Stata中介效应分析新选择:mediation包完整操作指南

本文介绍了Stata中介效应分析从传统sgmediation命令向mediation包的范式升级。重点阐述了如何使用medeff和medsens命令进行更严谨的因果推断,并执行关键的敏感性分析,以评估结果对未观测混杂的稳健性,为学术研究提供发表级的分析工具。

redis7keeper的博客 1157

android异常和错误,Android NDK C异常引发SIGSEGV和__gnu_cxx :: __ verbose_terminate_handler

我想在我的JNI代码中抛出std :: exception的子类,该代码使用swig进行了包装,但由于生成的代码非常简单,因此它实际上并不相关:void function_that_throws_exception() {...throw MyNativeException("Error");}try {function_that_throws_exception();} catch(MyNati...

weixin_26841743的博客 795

ANSYS/ANSYS Workbench生成mnf文件导入到Adams相关问题浅显解释

ANSYS/ANSYS Workbench生成mnf文件导入到Adams相关问题浅显解释。

weixin_45551870的博客 6981

nuttx使用uclibc在new的时候遇到__verbose_terminate_handler

关于这个问题,官方的回答写在了Readme里面了 Undefined reference to _impure_ptr ---------------------------------- Problem: When building uClibc++ I encounter an undefined reference to _impure_ptr like:   LD: nuttx   ....

qq_21856675的博客 2982

Altium Designer铺铜陷阱:为什么你的死铜总是清除不干净?

本文深入探讨Altium Designer中铺铜操作导致死铜无法清除的常见问题,分析死铜形成的五大诱因,并提供高级参数优化和网络连接性验证技巧。通过调整边界计算精度和泪滴算法设置,有效解决死铜残留问题,提升PCB设计质量与制造良率。

weixin_29169505的博客 359

独立站如何采集商品?外贸独立站采集教程

从这里Robert了解到还有国内有很多仿牌卖家、微商,都有类似的情况,他们出海的阻碍主要在于支付、物流、推广。8.插件“抓取任务”列表手动点同步,将商品同步到主商城后台商品管理列表(商品默认同步到下架列表中) 后台商品管理下架列表显示已同步商品。5.店铺信息修改完成后,可以开始采集商品,采集时弹窗中会自动识别当前平台及商品链接,分类和相册名称可以自定义 编辑修改。4. 打开采集目标站商品页面,点开谷歌浏览器扩展程序列表,找到Shopyy采集平台,打开配置页。打开弹窗中的“店铺管理”,添加店铺信息。

Jernnifer_mao的博客 1378

c 语言捕获子线程异常,c – 当一个线程在另一个线程中捕获到异常后运行时,进程使用SIGABRT中止...

我有一个退出处理程序线程等待工作线程执行其工作的条件.信令是从工作线程的析构函数完成的.下面是退出处理程序线程的代码.void Class::TaskExitHandler::run() throw(){while( ! isInterrupted() ) {_book->_eot_cond.wait(); // Waiting on this condition{CLASS_NAMESPA...

weixin_28994357的博客 483

数字设计与计算机体系结构习题答案,数字设计和计算机体系结构习题答案DigitalDesignandComputerArchitecture.pdf...

数字设计和计算机体系结构习题答案DigitalDesignandComputerArchitecture.pdfDavid Money Harris and Sarah L. Harris, Digital Design and Computer Architecture, © 2007 by Elsevier Inc.Exercise SolutionsC H A P T E R ...

weixin_39851408的博客 1785

调试libstdc++内部的函数

当libstdc++内部报错的时候一般不会深入调试,更多的是从自身代码来找问题。一方面是标准库出错的可能性较小,另一方面libstdc++的调试也不是很方便,默认的libstdc++不带符号表,stack一般定为不到具体的文件行号,比如: (gdb) bt #0  0x0000003ebda30265 in raise () from /lib64/libc.so.6 #1  0x00000

buptapple的专栏 6437

源码编译部署篇(二)源码编译milvus成功后如何启动standalone并调试成功!

由于Milvus官方文档只提及如何使用docker安装部署Milvus,关于源码安装方式篇幅较少,因此,我整理撰写了如何通过源码编译方式成功安装Milvus,详见此篇。之所以选择这种复杂的安装方式,可以调试源码进而熟悉Milvus如何搭建整个框架支持AI上层应用功能。根据上篇步骤部署虽然可以成功,然而,我却不能成功启动Milvus服务,这个问题困扰了一两天,现在终于得以解决并能成功调试Milvus源码。接下来,分为三个部分介绍如何启动和成功调试。

qq_43893755的博客 3367

YOLOv11改进 - C3k2融合 | C3k2融合融合WDBB宽度多样分支模块(Width Diverse Branch Block)通过多尺度分支增强特征表征能力

本文着眼于灰度图像目标检测所面临的挑战,提出了增强型目标检测网络 YOLO - MIF,该网络整合了多种多信息融合策略以对 YOLOv8 网络进行改进。文章开篇介绍了一种可创建伪多通道灰度图像的技术,此技术能增加网络的通道信息,同时缓解潜在的图像噪声与虚焦模糊问题。随后运用网络结构重新参数化技术,在不增加推断时间的情况下提升网络的检测性能。此外,引入了一种新颖的解耦式检测头,增强了模型处理灰度图像时的表现能力。

魔改工程师的博客 770

GDB调试实战:从核心转储到C++异常定位

本文详细介绍了在Linux环境下使用GDB调试C++程序核心转储文件的完整流程。从启用核心转储、编译调试信息,到基础GDB命令和实战除零异常分析,帮助开发者快速定位程序崩溃根源,提升调试效率。

mars5的博客 918

VScode c++用gdb单步调试和异常捕获绕过标准库文件

vscode用g++编译和gdb调试的一些特殊技巧。 这个最主要的目的我原本还是用于竞赛的(如果出异常的话),可惜中文网站几乎完全没有相关的内容。

m0_37667916的博客 4545

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

穿越时空的调试:用GDB捕捉C++异常与动态链接的隐秘瞬间

本文深入探讨GDB调试器中强大的catchpoint机制,专门用于捕捉C++异常抛出/捕获(throw/catch)与动态链接库加载/卸载(load/unload)等运行时事件。通过实战案例和命令详解,展示如何高效诊断难以复现的复杂问题,提升C++项目调试效率。

i7j8k9l的博客 951

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【GDB】调试C++的插件,DEBUG下的异常指标

一个教材链接

Edidaughter的博客 428

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C++如何快速调试异常位置?

1.明确调试的问题在一个大项目中,很多地方会throw异常,当碰到crash或者抛出异常时,我们需要解决两个问题:第一:异常的源头:究竟哪里抛出了异常第二:异常的处理:捕获异常位置对于异常来说,可能是有我们自己编写的throw触发,也可能是底层库的throw,所以到底是哪里触发的非常难以确认。所以我们需要解决上述两个问题。好在,gdb给我们提供了两个重要的命令。第一个可以使用:catchthro...

Francis的博客 198

gdb core文件怎么分析_调用GDB调试器的几种方式

《GDB调试C/C++程序》一节演示了用 GDB 调试 C(或者 C++)程序的整个过程,其中对 main.exe 文件启动 GDB 调试,执行的指令为:[root@bogon demo]# gdb main.exeGNU gdb (GDB) 8.0.1Copyright (C) 2017 Free Software Foundation, Inc.......(gdb)要知道,这仅是调...

weixin_32585497的博客 2676

JSON for Modern C++ 调试指南:调试器可视化(Natvis/GDB)与扩展异常诊断

调试 `nlohmann::json` 值时常遇到两类痛点:在调试器中展开一个 JSON 变量只能看到 `m_data`、`m_type`、`m_value` 等内部字段组成的原始结构,难以快速辨认键值内容;抛出 `type_error`/`out_of_range` 之类异常时,报错信息缺少"问题出在文档哪个字段"的上下文。本指南基于 JSON for Modern C++ 仓库官方文档 `do

gitblog_00008的博客 594

GDB使用手册(二)、GDB会话示例

您可以在闲暇时使用本手册来阅读有关GDB的所有信息。但是,一些命令就足以开始使用调试器了。本章说明了这些命令。 本文通过一个简单用例来展示: #include <stdio.h> int add(int a, int b) { a = a + 10; b = a + 10; return a + b; } int main() { int out = 0, tot = 0, cnt = 0; int val[] = { 5, 54, 76, 91, 35, 27, 45, 15,

学无止尽,谨言慎行! 2443

gdb vscode 不进入断点_VScode存在调试异常退出的情况

在VScode中调试一个非常简单的c++程序使用的是gdb然后出现非常熟悉的控制台黑色窗口然后我试图向控制台中输入它需要输入的几个变量的值像scanf("%d",&n)这种语句但是没有反应只有窗口中的光标在闪烁然后在调试控制台中输入"-exec list"它显示出了我的程序的部分代码然后添加了断点“-exec b 21”就像图片中显示的这样但是当我在调试控制台中输入''-exec run...

weixin_39986466的博客 3526

Gdb调试

GDB调试C/C++程序过程 gdb调试教程 例程 #include <stdio.h> int main () { unsigned long long int n, sum; n = 1; sum = 0; while (n <= 100) { sum = sum + n; n = n + 1; } return 0; } 前期准备 生成可供调试的编译源文件 g++ main.cpp -o m

weixin_42699130的博客 213

c++builder6.0 如何添加线程_GDB入门教程之如何使用GDB启动调试

写在前面:今天开始尝试写写除Vim外的其他内容,仍然是以技术为主,可能涉及的内容包括Linux、正则表达式、gdb、makefile等内容,不知道小伙伴们有没有兴趣看呢?不管如何,也算是我自己的知识沉淀吧~ 我把公众号改名了,你们猜猜新名字是啥?GDB (The GNU Project Debugger)是 Linux 系统下调试 C 和 C++ 程序的主要神兵。本文介绍多种方式下使用 ...

weixin_36076151的博客 271

C++崩溃现场取证:backward-cpp集成与栈回溯实战指南

C++程序在长时间运行后突然崩溃,往往没有日志、没有异常提示,只留下一个退出码。传统做法依赖gdb分析core dump,但面对release版、优化编译或符号缺失时,现场信息常被破坏。栈回溯技术应运而生,它能在崩溃发生的瞬间自动记录调用栈、函数名和行号,显著缩短定位时间。backward-cpp作为轻量级头文件库,通过注册信号处理器实现了这一能力,不仅支持segment fault等信号,还能捕获C++异常,适用于服务端、客户端和嵌入式等场景。它的集成成本极低,只需数行代码即可获得可靠的崩溃现场,配合gd

weixin_32642109的博客 133
上一篇: gdb 栈破坏 寄存器
下一篇: gdb调试宏、条件断点、命令行参数
linux_vae
博客等级 码龄15年 48粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值