프로그램이 디버그 기호로 컴파일되었는지 확인하는 방법은 무엇입니까?
이 질문에 이미 답변이 있습니다.
김프에서 일부 코드를 추적하고 싶으므로 디버그 기호가 활성화 된 김프가 필요합니다. 컴파일 중에 활성화했는지 여부가 기억 나지 않습니다. 프로그램을 다시 컴파일하지 않고 확인하는 방법은 무엇입니까?
Linux에서 file
및 사용할 수 있습니다 objdump
. 특히, 파일이 "제거됨"또는 "제거되지 않음"인지 여부와 objdump --syms
유용한 출력 여부를 확인할 수 있습니다 (일반 빌드의 경우 "심볼 없음"으로 표시됨).
objdump --syms
명령을 실행할 때 출력에 " 심볼 없음 "이상이 표시 됩니다 (최소한 커널 객체의 경우 ).
커널 객체 내부에 디버그 정보가 있는지 확인하려면 objdump
명령 끝에 다음을 추가 할 수 있습니다 | grep debug
..
이 문자열을 찾으면 커널 개체에 디버그 정보가 포함 된 것입니다. 그렇지 않다면 "깨끗한"커널 객체입니다.
디버그 정보 없이 컴파일 한 커널 모듈의 예 :
geertvc@jimi:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug
내가 컴파일 한 동일한 커널 모듈의 예 와 디버그 정보 :
geertvc@jimi:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug
00000000 l d .debug_frame 00000000 .debug_frame
00000000 l d .debug_info 00000000 .debug_info
00000000 l d .debug_abbrev 00000000 .debug_abbrev
00000000 l d .debug_loc 00000000 .debug_loc
00000000 l d .debug_aranges 00000000 .debug_aranges
00000000 l d .debug_ranges 00000000 .debug_ranges
00000000 l d .debug_line 00000000 .debug_line
00000000 l d .debug_str 00000000 .debug_str
00000010 l .debug_frame 00000000 $d
보시다시피 첫 번째 출력은 아무것도 반환하지 않는 반면 두 번째 출력은 그 안에있는 행을 반환 debug
합니다.
참고 : 제 경우에는 file
명령이 디버그 및 비디 버그 케이스 모두 에서 "제거되지 않음"을 반환했습니다 . 그러나 커널 객체의 크기 차이는 현저합니다.
- 약. 디버그 정보가없는 16k
- 약. 디버그 정보가있는 137k
분명히 후자의 버전에는 내부에 디버그 정보가있었습니다.
내 질문 : file
이러한 경우 명령이 신뢰할 수 있습니까? 내가 경험 한 것에서 나는 objdump --syms ... | grep debug
명령에 의존합니다 .
참고 URL : https://stackoverflow.com/questions/3284112/how-to-check-if-program-was-compiled-with-debug-symbols
'Programing' 카테고리의 다른 글
POST 매개 변수 콘텐츠의 최대 크기가 있습니까? (0) | 2020.11.15 |
---|---|
현재 ProcessID를 얻는 방법은 무엇입니까? (0) | 2020.11.15 |
명령 줄 옵션을 사용하여 헤더 파일을 포함 하시겠습니까? (0) | 2020.11.15 |
Python / Matplotlib-불연속 축을 만드는 방법이 있습니까? (0) | 2020.11.15 |
OrderedDict의 시작 부분에 요소를 추가하는 방법은 무엇입니까? (0) | 2020.11.15 |