programing

GDB로 주어진 함수 범위의 변수를 선언하는 방법은?

mailnote 2023. 9. 23. 23:01
반응형

GDB로 주어진 함수 범위의 변수를 선언하는 방법은?

나는 gdb가 이미 선언된 변수를 사용하여 설정하는 것을 허용한다는 것을 알고 있습니다.set지휘.

gdb가 주어진 함수의 범위 안에서 새로운 변수를 동적으로 선언하는 것이 가능합니까?

일부 공간을 동적으로 할당하여 새 변수를 저장하는 데 사용할 수 있습니다."현재 기능의 범위"가 의미하는 바에 따라 원하는 기능이 아닐 수도 있습니다.

그러나 출력 파라미터에 포인터를 가져오는 함수 func()가 있을 때의 모습은 다음과 같습니다.

set $foo = malloc(sizeof(struct funcOutStruct))
call func($foo)
p *$foo
call (void) free($foo)

C (그리고 아마도 C++) 코드의 경우, 이것은 매우 어려울 것입니다. 대부분의 구현에서 그렇게 하는 것은 스택 포인터를 이동하는 것을 수반하고, 이것은 더 이상 스택 프레임의 크기와 일치하지 않기 때문에 함수의 종료 코드를 실패하게 만들 것이기 때문입니다.또한 로컬 변수에 액세스하는 함수의 모든 코드는 갑자기 잘못된 위치에 부딪힐 위험이 있으며, 이 또한 좋지 않습니다.

그래서, 난 그렇게 생각하지 않아요, 아니에요.

전 그렇게 변수를 인쇄하고는 했어요

(gdb) set $path=((ngx_path_t     **)ngx_cycle->paths.elts)[2]
(gdb) print *$path
    $16 = {
        name = {
            len = 29,
            data = 0x80ed15c "/usr/local/nginx/fastcgi_temp"
            },
        len = 5,
        level = {1, 2, 0},
        manager = 0,
        loader = 0,
        data = 0x0,
        conf_file = 0x0,
        line = 0
    }

언급URL : https://stackoverflow.com/questions/10284103/how-to-declare-a-variable-in-the-scope-of-a-given-function-with-gdb

반응형