gpt4 book ai didi

linux - 如果出现错误,gdb 将在命令文件中停止。尽管有错误如何继续?

转载 作者:IT王子 更新时间:2023-10-29 00:01:15 34 4
gpt4 key购买 nike

我的真实 gdb 脚本在分析核心文件时尝试取消引用指针并得到“源命令文件中的错误:无法访问地址处的内存”,然后我的 gdb 脚本停止。我想要的只是不停地继续执行我的 gdb 脚本。可能吗?

这是演示我的问题的测试程序和测试 gdb 脚本。在这种情况下,指针具有 NULL 值,但在实际情况下,指针可能没有 null 无效值。

这是测试 C 程序:

#include <stdio.h>
struct my_struct {
int v1;
int v2;
};

int main()
{
my_struct *p;
printf("%d %d\n", p->v1, p->v2);
return 0;
}

这是一个测试 gdb 脚本:

>cat analyze.gdb
p p->v1
q

这是问题的演示(我想从这里的 gdb 得到这个错误消息,然后去处理 quit 命令):

>gdb -silent a.out ./core.22384 -x ./analyze.gdb
Reading symbols from /a.out...done.
[New Thread 22384]
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x0000000000400598 in main () at main.cpp:11
11 printf("%d %d\n", p->v1, p->v2);
./analyze.gdb:1: Error in sourced command file:
Cannot access memory at address 0x0
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.80.el6.x86_64


更新
感谢汤姆。这是一个处理这个问题的 gdb 脚本:

>cat ./analyze.v2.gdb
python
def my_ignore_errors(arg):
try:
gdb.execute("print \"" + "Executing command: " + arg + "\"")
gdb.execute (arg)
except:
gdb.execute("print \"" + "ERROR: " + arg + "\"")
pass

my_ignore_errors("p p")
my_ignore_errors("p p->v1")
gdb.execute("quit")

它是这样工作的:

>gdb -silent ./a.out -x ./analyze.v2.gdb -c ./core.15045
Reading symbols from /import/home/a.out...done.
[New Thread 15045]
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x0000000000400598 in main () at main.cpp:11
11 printf("%d %d\n", p->v1, p->v2);
$1 = "Executing command: p p"
$2 = (my_struct *) 0x0
$3 = "Executing command: p p->v1"
$4 = "ERROR: p p->v1"
$5 = "Executing command: quit"

最佳答案

gdb 的命令语言无法在处理命令时忽略错误。

不过,如果您的 gdb 是使用 Python 扩展构建的,那么这很容易完成。搜索“忽略错误”脚本。有了它,您可以:

(gdb) 忽略错误打印 *foo

... 将显示打印中的任何错误,但不会中止脚本的其余部分。

关于linux - 如果出现错误,gdb 将在命令文件中停止。尽管有错误如何继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17923865/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com