GDB 逐步执行中显示的未知代码

Unknown code showing in GDB step through

本文关键字:未知 代码 显示 执行 GDB      更新时间:2023-10-16

我正在运行GDB,在逐步执行一些简单的C++代码时,它开始显示下面的代码。有没有人知道这段代码是什么?

_Unwind_SjLj_Register (fc=0x28feac)    在。。/../../../src/gcc-4.6.1/libgcc/../gcc/unwind-sjlj.c:126126     ../../../../src/gcc-4.6.1/libgcc/../gcc/unwind-sjlj.c:没有这样的文件或目录。        在。。/../../../src/gcc-4.6.1/libgcc/../gcc/unwind-sjlj.c(GDB) 步骤128 英寸 ../../../../src/gcc-4.6.1/libgcc/../gcc/unwind-sjlj.c(GDB) 步骤131 英寸 ../../../../src/gcc-4.6.1/libgcc/../gcc/unwind-sjlj.c(GDB) 步骤133 英寸 ../../../../src/gcc-4.6.1/libgcc/../gcc/unwind-sjlj.c

从源代码(不知道这是否是你正在使用的确切版本,但应该足够接近以获得这个想法):

//
// Called at start of each function that catches exceptions
//
EXPORT void _Unwind_SjLj_Register(struct _Unwind_FunctionContext* fc)
{
    fc->prev = __Unwind_SjLj_GetTopOfFunctionStack();
    __Unwind_SjLj_SetTopOfFunctionStack(fc);
}

通常,在后台的编译C++代码中会发生很多事情。单步执行代码时,您经常会遇到名称神秘的编译器生成的函数、库函数(如您遇到的函数)等。

unwind通常表示异常处理代码,因此看起来您已经进入了throw指令。