gdb는 이미 선언 된 변수가 이 명령을 사용하여으로 설정되도록 허용한다는 것을 알고 있습니다.GDB를 사용하여 주어진 함수의 범위에서 변수를 선언하는 방법은 무엇입니까?
gdb가 주어진 함수의 범위 내에서 새로운 변수를 동적으로 선언 할 수 있습니까?
gdb는 이미 선언 된 변수가 이 명령을 사용하여으로 설정되도록 허용한다는 것을 알고 있습니다.GDB를 사용하여 주어진 함수의 범위에서 변수를 선언하는 방법은 무엇입니까?
gdb가 주어진 함수의 범위 내에서 새로운 변수를 동적으로 선언 할 수 있습니까?
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
}
를 인쇄하고 새 변수를 저장하는 데 사용하는 데 사용되는 방법입니다. "현재 함수의 범위"란 무엇을 의미 하느냐에 따라 원하는 결과가 아닐 수도 있습니다.
set $foo = alloc(sizeof(struct funcOutStruct))
func($foo)
p *$foo
free($foo)
무슨 좋은 할 것 : 여기
그러나 그것은 당신이 출력 매개 변수에 대한 포인터를 취 기능 FUNC를()있을 때, 같은 모습입니다? 이 코드는 그 존재를 인식하지 못합니다. –
어쨌든 @JamesMcLaughlin과 동의하십시오. ** no **, 검사 용입니다. –
gdb 변수를 사용 하시겠습니까? 'set $ foo = ...'와 나중에'$ foo'를 참조 할 수 있도록 편의를 위해 gdb 환경에서 변수를 생성 할 수 있습니다. 물론 이러한 변수는 실행중인 코드에서 전혀 볼 수 없습니다. – FatalError