gdb调试高级用法
Linux下進(jìn)程崩潰時(shí)定位源代碼位置
?gcc編譯器的默認(rèn)選項(xiàng)設(shè)置:
gcc -dumpspecs
gdb?調(diào)試打印完整字符串
?
如何在調(diào)試內(nèi)核時(shí),同時(shí)可以調(diào)試應(yīng)用程序的做法:
(cskygdb) c Continuing. ^C Program received signal SIGINT, Interrupt. default_idle () at arch/csky/kernel/process.c:83 83 __asm__ __volatile__( (cskygdb) hb *0x00065e34 ? ? ? ? ? ==》對(duì)應(yīng)應(yīng)用反匯編處的地址 Hardware assisted breakpoint 1 at 0x65e34 (cskygdb) c Continuing.Program received signal SIGTRAP, Trace/breakpoint trap. 0x00065e36 in ?? () (cskygdb) disa disable disassemble (cskygdb) disa disable disassemble (cskygdb) disassemble No function contains program counter for selected frame. (cskygdb) disassemble $pc,$pc+30 ? ?==》確認(rèn)地址是否跟反匯編處的地址一樣 Dump of assembler code from 0x65e36 to 0x65e54: => 0x00065e36: st r15, (r0, 24)0x00065e38: st r8, (r0, 28)0x00065e3a: mov r8, r00x00065e3c: st r2, (r8, 8)0x00065e3e: st r3, (r8, 12)0x00065e40: st r4, (r8, 16)0x00065e42: bmaski r7, 00x00065e44: st r7, (r8, 0)0x00065e46: ld r7, (r8, 12)0x00065e48: bmaski r6, 80x00065e4a: andn r7, r7, r60x00065e4c: cmpnei r7, 00x00065e4e: bt 0x65e5c0x00065e50: ld r2, (r8, 8)0x00065e52: ld r3, (r8, 12) End of assembler dump. (cskygdb) add-symbol-file /home/yingc/nfs/dvb/out.elf 0x00080e0 ?==》0x00080e0是text段的地址 add symbol table from file "/home/yingc/nfs/dvb/out.elf" at.text_addr = 0x80e0 (y or n) y Reading symbols from /home/yingc/nfs/dvb/out.elf...done. (cskygdb) si \0x00065e38 23 { (cskygdb) l 18 19 #include "module/app_ioctl.h" 20 //#include "module/app_ca_manager.h" 21 22 status_t app_ioctl(uint32_t id, uint32_t cmd, void * params) 23 { 24 status_t ret = GXCORE_ERROR; 25 switch (cmd & (~0xff)) 26 { 27 case APP_FRONTEND_BASE: (cskygdb) n\yingc@yingc:~/work/goxceed-dvbs-hd/test/solution/output$ csky-elf-readelf -S out.elf
There are 28 section headers, starting at offset 0xa84da0:
Section Headers:
? [Nr] Name????????????? Type??????????? Addr???? Off??? Size?? ES Flg Lk Inf Al
? [ 0]?????????????????? NULL??????????? 00000000 000000 000000 00????? 0?? 0? 0
? [ 1] .init???????????? PROGBITS??????? 000080b4 0000b4 000022 00? AX? 0?? 0? 4
? [ 2] .text???????????? PROGBITS??????? 000080e0 0000e0 2f779a 00? AX? 0?? 0 16
? [ 3] .fini???????????? PROGBITS??????? 002ff87c 2f787c 000016 00? AX? 0?? 0? 4
? [ 4] .rodata?????????? PROGBITS??????? 002ff8a0 2f78a0 071b60 00?? A? 0?? 0 16
? [ 5] .eh_frame???????? PROGBITS??????? 00371400 369400 0013a8 00?? A? 0?? 0? 4
? [ 6] .tdata??????????? PROGBITS??????? 003737a8 36a7a8 000004 00 WAT? 0?? 0? 4
? [ 7] .tbss???????????? NOBITS????????? 003737ac 36a7ac 000008 00 WAT? 0?? 0? 4
? [ 8] .ctors??????????? PROGBITS??????? 003737ac 36a7ac 000008 00? WA? 0?? 0? 4
? [ 9] .dtors??????????? PROGBITS??????? 003737b4 36a7b4 000008 00? WA? 0?? 0? 4
? [10] .jcr????????????? PROGBITS??????? 003737bc 36a7bc 000004 00? WA? 0?? 0? 4
? [11] .got????????????? PROGBITS??????? 003737c0 36a7c0 0000c4 04? WA? 0?? 0? 4
? [12] .data???????????? PROGBITS??????? 00373888 36a888 04a8f8 00? WA? 0?? 0? 8
? [13] .bss????????????? NOBITS????????? 003be180 3b5180 05a4cc 00? WA? 0?? 0? 8
? [14] .comment????????? PROGBITS??????? 00000000 3b5180 000082 01? MS? 0?? 0? 1
? [15] .debug_aranges??? PROGBITS??????? 00000000 3b5202 008558 00????? 0?? 0? 1
? [16] .debug_pubnames?? PROGBITS??????? 00000000 3bd75a 01cd87 00????? 0?? 0? 1
? [17] .debug_info?????? PROGBITS??????? 00000000 3da4e1 3b54ec 00????? 0?? 0? 1
? [18] .debug_abbrev???? PROGBITS??????? 00000000 78f9cd 03ddac 00????? 0?? 0? 1
? [19] .debug_line?????? PROGBITS??????? 00000000 7cd779 19ac68 00????? 0?? 0? 1
? [20] .debug_frame????? PROGBITS??????? 00000000 9683e4 043dc0 00????? 0?? 0? 4
? [21] .debug_str??????? PROGBITS??????? 00000000 9ac1a4 06262a 01? MS? 0?? 0? 1
? [22] .debug_loc??????? PROGBITS??????? 00000000 a0e7ce 00e472 00????? 0?? 0? 1
? [23] .debug_pubtypes?? PROGBITS??????? 00000000 a1cc40 061f78 00????? 0?? 0? 1
? [24] .debug_ranges???? PROGBITS??????? 00000000 a7ebb8 0060e8 00????? 0?? 0? 1
? [25] .shstrtab???????? STRTAB????????? 00000000 a84ca0 0000fe 00????? 0?? 0? 1
? [26] .symtab?????????? SYMTAB????????? 00000000 a85200 034710 10???? 27 7115? 4
? [27] .strtab?????????? STRTAB????????? 00000000 ab9910 03845b 00????? 0?? 0? 1
Key to Flags:
? W (write), A (alloc), X (execute), M (merge), S (strings)
? I (info), L (link order), G (group), x (unknown)
? O (extra OS processing required) o (OS specific), p (processor specific)
259129 00065e34 <app_ioctl>:
259130
259131 #include "module/app_ioctl.h"
259132 //#include "module/app_ca_manager.h"
259133
259134 status_t app_ioctl(uint32_t id, uint32_t cmd, void * params)
259135 {
259136??? 65e34:?? 25f0????? ? subi??? r0, r0, 32
259137??? 65e36:?? 9f60????? ? st? r15, (r0, 24)
259138??? 65e38:?? 9870????? ? st? r8, (r0, 28)
259139??? 65e3a:?? 1208????? ? mov?r8, r0
259140??? 65e3c:?? 9228????? ? st? r2, (r8, 8)
259141??? 65e3e:?? 9338????? ? st? r3, (r8, 12)
259142??? 65e40:?? 9448????? ? st? r4, (r8, 16)
259143???? status_t ret = GXCORE_ERROR;
259144??? 65e42:?? 2c07????? ? bmaski? r7, 0
259145??? 65e44:?? 9708????? ? st? r7, (r8, 0)
259146???? switch (cmd & (~0xff))
259147??? 65e46:?? 8738????? ? ld? r7, (r8, 12)
259148??? 65e48:?? 2c86????? ? bmaski? r6, 8
259149??? 65e4a:?? 1f67????? ? andn??? r7, r7, r6
259150??? 65e4c:?? 2a07????? ? cmpnei? r7, 0
259151??? 65e4e:?? e006????? ? bt? 0x65e5c
259152???? {
259153???????? case APP_FRONTEND_BASE:
259154???????????? ret = nim_ioctl(id, cmd, params);
注意:hb 的個(gè)數(shù)有限制,即使disable的話(huà),也可能會(huì)不響應(yīng)下一個(gè)
Unable to handle kernel paging request at virtual address 00000000, epc == 90164fc4
。。。。。。 [ 54.940000] CURRENT PROCESS: [ 54.940000] [ 54.950000] COMM=out.elf PID=922 [ 54.950000] TEXT=00008000-0029e630 DATA=0029f630-0031d180 BSS=0031d180-0041e000 [ 54.960000] USER-STACK=7faa2e80 KERNEL-STACK=904ef560 [ 54.960000] [ 54.960000] PC: 0x90164fc4 [ 54.970000] PSR: 0x8f150141 [ 54.970000] r1: 0x00000030 syscallr2: 0x0000e190 r2: 0x0000e190 r3: 0x00000000 [ 54.980000] r4: 0x9025908c r5: 0xe470e190 r6: 0xe40e0020 r7: 0x9023b08c [ 54.990000] r8: 0x00000000 r9: 0x92cb4000 r10: 0x00001101 r11: 0x00000000 [ 54.990000] r12: 0x902e6ef4 r13: 0x00043800 r14: 0x9023b08c r15: 0x90162154 [ 55.000000] [ 55.000000] CODE: [ 55.010000] 90164fa4: 97361c47 75737e87 1ce41254 f00e12e7 [ 55.010000] 90164fb4: 3d06c607 1e26c217 3d05c527 1e25c237 [ 55.020000] 90164fc4: 12359503 96052035 20732077 e7f00f47 [ 55.020000] 90164fd4: 12236002 77637f7c 747b8607 75661c46 [ 55.030000] [ 55.030000] KERNEL STACK: [ 55.030000] 92cb5dc0: 00000000 92cb5e54 000000a0 00000000 [ 55.040000] 92cb5dd0: 0000011c 0000003b 902dd310 90029f84 Unable to handle kernel paging request at virtual address 00000000, epc == c07055f0[root@gx3201 /]# lsmod ohci_hcd 15264 0 - Live 0xc0074000 ehci_hcd 25520 0 - Live 0xc006c000 av 1121948 2 - Live 0xc06e2000(cskygdb) p /x 0xc07055f0-0xc06e2000 $2 = 0x235f0
av.ko 反匯編:
105593 RetCode VPU_Init(PhysicalAddress workBuf,VirtualAddress Virtual_addr) 105594 235d6: 7547 lrw r5, 0x1E000 105595 235d8: 1254 mov r4, r5 105596 235da: 1ce4 addu r4, r4, r14 105597 disFlagRegAddr[0] = BIT_FRM_DIS_FLG_0; 105598 disFlagRegAddr[1] = BIT_FRM_DIS_FLG_1; 105599 disFlagRegAddr[2] = BIT_FRM_DIS_FLG_2; 105600 disFlagRegAddr[3] = BIT_FRM_DIS_FLG_3; 105601 105602 for (i = 0; i < sizeof(bit_code) / sizeof(bit_code[0]); i += 4) 105603 235dc: 12e7 mov r7, r14 105604 235de: f00e br 0x235fc 105605 { 105606 dataH = (bit_code[i+0] << 16) | bit_code[i+1]; 105607 235e0: c607 ldh r6, (r7, 0) 105608 235e2: 3d06 lsli r6, r6, 16 105609 235e4: c217 ldh r2, (r7, 2) 105610 235e6: 1e26 or r6, r6, r2 105611 dataL = (bit_code[i+2] << 16) | bit_code[i+3]; 105612 235e8: c527 ldh r5, (r7, 4) 105613 235ea: 3d05 lsli r5, r5, 16 105614 235ec: c237 ldh r2, (r7, 6) 105615 235ee: 1e25 or r5, r5, r2 105616 VpuWriteMem(vir_code_buf+i*2, dataL); 105617 235f0: 9503 st r5, (r3, 0) 105618 int VPU_IsBusy() 105619 { 105620 return VpuReadReg(BIT_BUSY_FLAG) != 0; 105621 } 105622 79 for (i = 0; i < sizeof(bit_code) / sizeof(bit_code[0]); i += 4) 80 { 81 dataH = (bit_code[i+0] << 16) | bit_code[i+1]; 82 dataL = (bit_code[i+2] << 16) | bit_code[i+3]; 83 VpuWriteMem(vir_code_buf+i*2, dataL); 84 VpuWriteMem(vir_code_buf+i*2+4, dataH); 85 }?
gdb dump內(nèi)存中的數(shù)據(jù)及查看代碼段是否被沖:
(cskygdb) dump memory 111.yuv 0x94f54cc8 0x94f54cc8 + 0x450*200 (cskygdb) p 0x450 $7 = 1104display -size 1104x200 111.yuvLoading section .text, size 0x64b628 lma 0x90000000
?? ?section progress: 100.0%, total progress: 100.0%
Loading section .devtab, size 0xa28 lma 0x9064b628
?? ?section progress: 100.0%, total progress: 100.0%
Start address 0x90000458, load size 6602832
Transfer rate: 853 KB/sec, 4093 bytes/write.
0x90000458 in __reset_vector ()
(cskygdb) 46edfc
Undefined command: "46edfc".? Try "help".
(cskygdb) dump binary memory text.ok 0x90000000 0x90000000+0x46edfc
(cskygdb) c
Continuing.
^C
Program received signal SIGINT, Interrupt.
0x900e99ce in idle_thread_main (data=0)
??? at /home/yingc/work/gitcode/v1.9-dev/gxcoreapi/ecos3.0/packages/kernel/v3_0/src/common/thread.cxx:1244
1244?? ???????? HAL_IDLE_THREAD_ACTION(idle_thread_loops[CYG_KERNEL_CPU_THIS()]);
(cskygdb) dump binary memory text1.ok 0x90000000 0x90000000+0x46edfc
(cskygdb) c
?21 SECTIONS
?22 {
?23
?24???? .text : {
?25???????????? _start_text = .;
?26???????????? . = ALIGN (0x4);
?27???????? . = ALIGN (0x4); *(.rel.*) *(.rela.*)
?28???????? . = ALIGN (0x4); _stext = .; _etext = .; _ftext = . ; *(.text*) *(.stub)
?29
?30???????? . = ALIGN (0x4);
?31???????????????????????????????? _sdata = . ;
?32???????????????????????????????? __data_start = . ;
?33???????????????????????????????? data_start = . ;
?34???????????????????????????????? *(.got_plt)
?35???????????????????????????????? *(.got)
?36???????????????????????????????? FILL(0);
?37???????????????????????????????? . = ALIGN(0x20) ;
?38???????????????????????????????? LONG(-1)
?39???????????????? . = ALIGN(0x20) ;
?40???????????????? *(.rodata)
?41???????????????? *(.rodata*)
?42???????????????? *(.rodata1)
?43???????????????? *(.rodata.*)
?44???????????????? *(.rodata.str1.4)
?45???????????????? *(.gnu.linkonce.r*)
?46???????????????? *(.data)
?47???????????????? *(.data*)
16434 9046ec14 T yaffs_ECCCalculateOther
16435 9046ecbc T yaffs_ECCCorrectOther
16436 9046edfc T __data_start
16437 9046edfc T _sdata
16438 9046edfc T data_start
16439 90473fc4 t __FUNCTION__.11312
16440 90473fd8 t __FUNCTION__.11303
16441 90473fec t __FUNCTION__.11293
ecos3.0/packages/hal/gx/ckmmu/ck610m/var/v3_0/src/ckmmu_ck610m.ld
?gdb調(diào)試內(nèi)核.gdbinit文件的寫(xiě)法:
1 tar jtag jtag://127.0.1.1:10252 handle SIG32 nostop noprint3 handle SIG33 nostop noprint4 #set $cr18=0x7d5 #set *0x0030a178 |= 0x76 #set *0x0030a178 |= 0x37 #set *0x0030a178 |= (1<<4)|(1<<5)8 9 load10 #b main11 #display /i $pc12 #b IMG.c:124413 #b widget.c:96814 15 #c16 #q?編譯中間結(jié)果:
2155 make ARCH=csky CROSS_COMPILE=csky-linux- uImage -j42156 make ARCH=csky CROSS_COMPILE=csky-linux- uImage -j4 V=12157 csky-linux-gcc -Wp,-MD,net/sunrpc/.rpcb_clnt.o.d -nostdinc -isystem /usr/local/csky-linux/bin/../lib/gcc/csky-linux/4.5.1/include -D__KERNEL__ -Iinclude -I/home/yingc/gcyin/vgitcode/3211-sync/linux-2.6.27.55/arch/csky/include -include include/linux/autoconf.h -mlittle-endian -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -fno-delete-null-pointer-checks -O0 -fsigned-char -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -fno-delete-null-pointer-checks -O0 -I -pipe -DNO_FPU -D__ELF__ -DMAGIC_ROM_PTR -D__linux__ -DNO_TEXT_SECTIONS -Wa,-no-jsri2bsr,-mcpu=ck610f -Iarch/csky/gx3xxx/include -Wframe-larger-than=1024 -fno-stack-protector -fomit-frame-pointer -g -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(rpcb_clnt)" -D"KBUILD_MODNAME=KBUILD_STR(sunrpc)" -c -o net/sunrpc/rpcb_clnt.o net/sunrpc/rpcb_clnt.c2158 csky-linux-gcc -Wp,-MD,net/sunrpc/.rpcb_clnt.o.d -nostdinc -isystem /usr/local/csky-linux/bin/../lib/gcc/csky-linux/4.5.1/include -D__KERNEL__ -Iinclude -I/home/yingc/gcyin/vgitcode/3211-sync/linux-2.6.27.55/arch/csky/include -include include/linux/autoconf.h -mlittle-endian -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -fno-delete-null-pointer-checks -O0 -fsigned-char -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -fno-delete-null-pointer-checks -O0 -I -pipe -DNO_FPU -D__ELF__ -DMAGIC_ROM_PTR -D__linux__ -DNO_TEXT_SECTIONS -Wa,-no-jsri2bsr,-mcpu=ck610f -Iarch/csky/gx3xxx/include -Wframe-larger-than=1024 -fno-stack-protector -fomit-frame-pointer -g -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(rpcb_clnt)" -D"KBUILD_MODNAME=KBUILD_STR(sunrpc)" -c -o net/sunrpc/rpcb_clnt.o net/sunrpc/rpcb_clnt.c --save-temps2159 vi rpcb_clnt.i2160 vi net/sunrpc/rpcb_clnt.c +122 rpcb_clnt.i -O2161 csky-linux-gcc -Wp,-MD,net/sunrpc/.rpcb_clnt.o.d -nostdinc -isystem /usr/local/csky-linux/bin/../lib/gcc/csky-linux/4.5.1/include -D__KERNEL__ -Iinclude -I/home/yingc/gcyin/vgitcode/3211-sync/linux-2.6.27.55/arch/csky/include -include include/linux/autoconf.h -mlittle-endian -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -fno-delete-null-pointer-checks -O0 -fsigned-char -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -fno-delete-null-pointer-checks -O2 -I -pipe -DNO_FPU -D__ELF__ -DMAGIC_ROM_PTR -D__linux__ -DNO_TEXT_SECTIONS -Wa,-no-jsri2bsr,-mcpu=ck610f -Iarch/csky/gx3xxx/include -Wframe-larger-than=1024 -fno-stack-protector -fomit-frame-pointer -g -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(rpcb_clnt)" -D"KBUILD_MODNAME=KBUILD_STR(sunrpc)" -c -o net/sunrpc/rpcb_clnt.o net/sunrpc/rpcb_clnt.c --save-temps2162 vi rpcb_clnt.i2163 history?
?
linux下用GDB調(diào)試可加載模塊
http://blog.csdn.net/justlinux2010/article/details/8508333
[root@gx6602 /]# lsmod
ohci_hcd 19028 0 - Live 0xc009e000
ehci_hcd 33276 0 - Live 0xc00b9000
fe 221368 0 - Live 0xc03c7000
av 1933852 0 - Live 0xc0b7f000
?
yingc@yingc:~/nfs/lib/modules/2.6.27.55$ csky-linux-objdump -h av.ko
av.ko:???? file format elf32-csky-little
Sections:
Idx Name????????? Size????? VMA?????? LMA?????? File off? Algn
? 0 .note.gnu.build-id 00000024? 00000000? 00000000? 00000034? 2**2
????????????????? CONTENTS, ALLOC, LOAD, READONLY, DATA
? 1 .text???????? 000c1824? 00000000? 00000000? 00000058? 2**2
????????????????? CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
? 2 .init.text??? 000001e8? 00000000? 00000000? 000c187c? 2**2
(cskygdb) add-symbol-file ~/nfs/lib/modules/2.6.27.55/av.ko
The address where /home/yingc/nfs/lib/modules/2.6.27.55/av.ko has been loaded is missing
(cskygdb) add-symbol-file ~/nfs/lib/modules/2.6.27.55/av.ko 0xc0b7f058
add symbol table from file "/home/yingc/nfs/lib/modules/2.6.27.55/av.ko" at
?? ?.text_addr = 0xc0b7f058
(y or n) y
Reading symbols from /home/yingc/nfs/lib/modules/2.6.27.55/av.ko...done.
(cskygdb) b gx3201_hdmi_open
?
yingc@yingc:~/tmp$ csky-linux-gcc -O0 -g -I/usr/local/csky-linux -I/usr/local/csky-linux/csky-linux -I/usr/local/csky-linux/csky-linux/libc/usr/include -L/usr/local/csky-linux/csky-linux/lib/libstdc++.a thread.c -L/usr/local/csky-linux/libc/usr/lib/libpthread.a -static /tmp/ccCOd8La.o: In function `main': /home/yingc/tmp/thread.c:31: undefined reference to `pthread_attr_init' /home/yingc/tmp/thread.c:33: undefined reference to `pthread_attr_setstacksize' /home/yingc/tmp/thread.c:35: undefined reference to `pthread_create' /home/yingc/tmp/thread.c:41: undefined reference to `pthread_attr_destroy' /tmp/ccCOd8La.o: In function `main': thread.c:(.text+0x90): undefined reference to `pthread_attr_init' thread.c:(.text+0x94): undefined reference to `pthread_attr_setstacksize' thread.c:(.text+0x9c): undefined reference to `pthread_create' thread.c:(.text+0xa8): undefined reference to `pthread_attr_destroy' collect2: ld returned 1 exit status yingc@yingc:~/tmp$ yingc@yingc:~/tmp$ yingc@yingc:~/tmp$ yingc@yingc:~/tmp$ yingc@yingc:~/tmp$ csky-linux-gcc -O0 -g -I/usr/local/csky-linux -I/usr/local/csky-linux/csky-linux -I/usr/local/csky-linux/csky-linux/libc/usr/include -L/usr/local/csky-linux/csky-linux/lib/libstdc++.a thread.c -L/usr/local/csky-linux/libc/usr/lib lpthread -static csky-linux-gcc: lpthread: 沒(méi)有那個(gè)文件或目錄 yingc@yingc:~/tmp$ yingc@yingc:~/tmp$ csky-linux-gcc -O0 -g -I/usr/local/csky-linux -I/usr/local/csky-linux/csky-linux -I/usr/local/csky-linux/csky-linux/libc/usr/include -L/usr/local/csky-linux/csky-linux/lib/libstdc++.a thread.c -L/usr/local/csky-linux/libc/usr/lib -lpthread -static yingc@yingc:~/tmp$ yingc@yingc:~/tmp$ yingc@yingc:~/tmp$ yingc@yingc:~/tmp$ yingc@yingc:~/tmp$ csky-linux-gcc -O0 -g -I/usr/local/csky-linux -I/usr/local/csky-linux/csky-linux -I/usr/local/csky-linux/csky-linux/libc/usr/include -L/usr/local/csky-linux/csky-linux/lib/libstdc++.a thread.c -L/usr/local/csky-linux/libc/usr/lib -lpthread -static?
hello world的本質(zhì)-----預(yù)編譯,編譯,匯編
gcc -E hello.c -o hello.i這個(gè)命令就是用來(lái)生成預(yù)處理后的文件的。生成匯編代碼文件的命令
gcc -S hello.i -o hello.s
匯編命令
gcc -c hello.s -o hello.o
?
?
?
aa
轉(zhuǎn)載于:https://www.cnblogs.com/jingzhishen/p/4125768.html
總結(jié)
- 上一篇: css3 点击爆炸下落
- 下一篇: robotium诡异的Instrumen