gdb - 如何在不向应用程序传递信号的情况下进行步进?
问题描述
假设在 GDB 下运行的进程由于接收到信号而停止,例如SIGSEGV
由于访问无效位置。然后我修复该位置(通过写入寄存器或以任何其他方式)并希望单步执行,重试错误指令。
有一个 command stepi
,如果信号被忽略或一开始没有被接收到,它将起作用。但是由于有一个待处理的信号,我不能使用它,至少不能直接使用。如果我使用signal 0
命令,它会忽略信号,但它会作为continue
. 因此,如果我使用signal 0
,我必须找出下一条指令从哪里开始,在其上添加 atb
等等。这很不方便。
另一种方式就像handle SIGSEGV ignore
后面stepi
跟着另一个handle
命令来恢复它的原始状态。同样不方便:甚至不能define
为此提供“黑匣子”功能,因为信号处理的原始状态可能是非默认状态,并且在si
.
那么,有什么简单的方法可以在不继续执行的情况下删除挂起的信号吗?
解决方案
推荐阅读
- php - PHP_FPM 错误 - “哎呀,未知子 (538) 以代码 0 退出”
- python - 使用 Sympy、python 将复数方程的指数形式转换为极坐标形式
- elasticsearch - 具有相同数据和文档数的弹性搜索索引大小的差异
- r - 在一张图中绘制多个 geom_line 和 geom_smooth 对象
- r - R闪亮应用程序中GET()授权中的不记名令牌
- python - 程序结构私钥和请求
- azure - Azure 通过 Rest API 或 python 模块(MS Graph)按名称或电子邮件地址搜索用户、组或服务原则?
- c++ - 如何在不复制太多代码的情况下重构此代码?
- arrays - 数组到索引值对的字符串
- visual-studio-code - 我可以执行由 CSV/Excel 文件驱动的查找/替换吗?