나쁜 영어로 죄송합니다.GAS 소스에서 GDB의 전역 변수를 어떻게 인식 할 수 있습니까?
내 워크 플로우을 :
내가 GNU의 ASM (GAS)을위한 간단한 프로그램을 작성은 test_c.s : 디버그 기호
.intel_syntax noprefix .globl my_string .data my_string: .ascii "Hello, world!\0" .text .globl main main: push rbp mov rbp, rsp sub rsp, 32 lea rcx, my_string call printf add rsp, 32 pop rbp ret
컴파일은 ASM 소스 :
gcc -g test_c.s
GDB에서 a.exe 디버그 :
gdb a -q Reading symbols from C:\a.exe...done. (gdb) start Temporary breakpoint 1 at 0x4014e4: file test_c.s, line 14. Starting program: C:\a.exe [New Thread 3948.0x45e4] Temporary breakpoint 1, main() at test_c.s:14 14 sub rsp, 32 (gdb) whatis my_string type = <data variable, no debug info> <-------------------- why? (gdb) info variables All defined variables: ... Non-debugging symbols: 0x0000000000403000 __data_start__ 0x0000000000403000 __mingw_winmain_nShowCmd 0x0000000000403010 my_string <-------------------- why? ....
왜 'my_string'은 '디버그 정보 없음'변수입니까? 어떻게 'my_string'이 사용자 정의 변수인지 인식 할 수 있습니까? 일부 gcc 플래그 또는 가스 지시문?
PS : 위에 나열된 파일 test_c.s는 간단한 C 응용 test_c.c에서 GCC에 의해 생성됩니다
#include<stdio.h>
char my_string[] = "Hello, world!";
int main(void)
{
printf(my_string);
}
gcc test_c.c -S -masm=intel
나는이 C-응용 프로그램을 디버깅 및 예상 결과를 얻을려고 :
를gcc -g test_c.c
gdb a -q
Reading symbols from C:\a.exe...done.
(gdb) start
Temporary breakpoint 1 at 0x4014ed: file test_c.c, line 7.
Starting program: C:\a.exe
[New Thread 11616.0x1688]
Temporary breakpoint 1, main() at test_c.c:7
7 printf(my_string);
(gdb) whatis my_string
type = char [18] <-------------------- OK
(gdb) info variables
...
File test_c.c:
char my_string[18]; <-------------------- OK
...
문제는 내가, 가스 소스에 관한 디버그 정보를하지 C
PSS를 필요로한다는 것입니다 :는 MinGW -builds x64 v.4.8.1
해결 방법이 있습니까? GDB를위한'my_string'의 타입에 관한 최소한의 디버그 정보를 추가 할 수 있습니까? – Dem0n13
물론 컴파일러와 동일한 종류의 디버그 정보를 추가 할 수는 있지만 지루하고 형식을 알아야합니다 (이 경우에는 'dwarf2'입니다). – Jester