Programing

무엇을

crosscheck 2020. 12. 13. 08:57
반응형

무엇을 gdb에서 의미합니까?


(gdb) n
134   a = b = c = 0xdeadbeef + ((uint32_t)length) + initval;
(gdb) n
(gdb) p a
$30 = <value optimized out>
(gdb) p b
$31 = <value optimized out>
(gdb) p c
$32 = 3735928563

gdb는 어떻게 내 가치를 최적화 할 수 있습니까 ??


즉, eg로 컴파일 gcc -O3하고 gcc 옵티마이 저가 일부 변수가 중복되어 최적화 될 수 있다는 것을 발견했습니다. 이 특별한 경우에는 동일한 값을 가진 세 개의 변수 a, b, c가있는 것처럼 보이며 아마도 모두 단일 변수로 별칭을 지정할 수 있습니다. 최적화가 비활성화 된 상태로 컴파일하십시오. 예를 들어 gcc -O0이러한 변수를보고 싶다면 (이것은 일반적으로 어떤 경우 든 디버그 빌드에 좋은 아이디어입니다).


그렇지 않았습니다. 컴파일러가 수행했지만 원래 변수 이름에 대한 디버그 기호가 여전히 있습니다.


에서 https://idlebox.net/2010/apidocs/gdb-7.0.zip/gdb_9.html

스택 프레임에 저장되지 않은 인수의 값은 '최적화 된 값'으로 표시됩니다.

-O (somevalue)로 컴파일하고 최적화가 발생한 함수에서 변수 a, b, c에 액세스하고 있다고 추측합니다.


"export COPTS = '-g -O0';"를 실행하십시오. 코드를 다시 작성하십시오. 다시 빌드 한 후 gdb를 사용하여 디버그합니다. 이러한 오류는 표시되지 않습니다. 감사.

참고 URL : https://stackoverflow.com/questions/5497855/what-does-value-optimized-out-mean-in-gdb

반응형