📄 00000009.htm
字号:
gdi.h misc.h common.h <BR>window.o: menu.h fixstr.h cliprect.h window.h event.h cursor.h \ <BR> gdi.h misc.h common.h <BR>menu.o: menu.h fixstr.h cliprect.h window.h event.h cursor.h \ <BR> gdi.h misc.h common.h <BR>fixstr.o: fixstr.h common.h <BR>timer.o: timer.h window.h gdi.h cliprect.h inline.h common.h <BR>dti.o: menu.h window.h gdi.h cliprect.h inline.h common.h <BR>main.o: main.h common.h <BR>――――――――――――――――――――――――――――――――――――――― <BR>在上面的 makefile 文件中,定义了多个目标以及和其他源文件的依赖关系。我们可 <BR>以注意到上述 makefile 中定义了一些变量,同时使用 GNU make 的内置隐含规则编译各 <BR>个 .c 源文件。执行 make 命令时的输出如下: <BR>[WeiYM@rocket src]$ make clean <BR>rm -f *.o *~ .*.swp .*.swo <BR>[WeiYM@rocket src]$ make <BR>gcc -O2 -Wall -m486 -D_REENTRANT -c testgui.c -o testgui.o <BR>gcc -O2 -Wall -m486 -D_REENTRANT -c misc.c -o misc.o <BR>gcc -O2 -Wall -m486 -D_REENTRANT -c gdi.c -o gdi.o <BR>gcc -O2 -Wall -m486 -D_REENTRANT -c cursor.c -o cursor.o <BR>gcc -O2 -Wall -m486 -D_REENTRANT -c event.c -o event.o <BR>gcc -O2 -Wall -m486 -D_REENTRANT -c desktop.c -o desktop.o <BR>gcc -O2 -Wall -m486 -D_REENTRANT -c window.c -o window.o <BR>gcc -O2 -Wall -m486 -D_REENTRANT -c main.c -o main.o <BR>gcc -O2 -Wall -m486 -D_REENTRANT -c cliprect.c -o cliprect.o <BR>gcc -O2 -Wall -m486 -D_REENTRANT -c menu.c -o menu.o <BR>gcc -O2 -Wall -m486 -D_REENTRANT -c fixstr.c -o fixstr.o <BR>gcc -O2 -Wall -m486 -D_REENTRANT -c timer.c -o timer.o <BR>gcc -O2 -Wall -m486 -D_REENTRANT -c dti.c -o dti.o <BR>gcc -o testgui testgui.o misc.o gdi.o cursor.o event.o desktop.o window.o main.d <BR>13.3.3.5 make 命令的常用选项 <BR>我们知道,直接在 make 命令的后面键入目标名可建立指定的目标,如果直接运行 <BR>make,则建立第一个目标。我们还知道可以用 make -f mymakefile 这样的命令指定 make <BR>使用特定的 makefile,而不是默认的 GNUmakefile、makefile 或 Makefile。但 GNU make <BR>命令还有一些其他选项,表 13-3 给出了这些选项。 <BR>表 13-3 GNU make 命令的常用命令行选项 <BR>命令行选项 <BR>含义 <BR>-C DIR <BR>在读取 makefile 之前改变到指定的目录 DIR。 <BR>-f FILE <BR>以指定的 FILE 文件作为 makefile。 <BR>-h <BR>显示所有的 make 选项。 <BR>-i <BR>忽略所有的命令执行错误。 <BR>-I DIR <BR>当包含其他 makefile 文件时,可利用该选项指定搜索目录。 <BR>-n <BR>只打印要执行的命令,但不执行这些命令。 <BR>-p <BR>显示 make 变量数据库和隐含规则。 <BR>-s <BR>在执行命令时不显示命令。 <BR>-w <BR>在处理 makefile 之前和之后,显示工作目录。 <BR>-W FILE <BR>假定文件 FILE 已经被修改。 <BR> <BR>13.3.4 GNU 的调试器 <BR>GNU 的调试器称为 gdb,该程序是一个交互式工具,工作在字符模式。在 X Window 系 <BR>统中,有一个 gdb 的前端图形工具,称为 xxgdb。gdb 是功能强大的调试程序,可完成 <BR>如下的调试任务: <BR>? 设置断点; <BR>? 监视程序变量的值; <BR>? 程序的单步执行; <BR>? 修改变量的值。 <BR>在可以使用 gdb 调试程序之前,必须使用 -g 选项编译源文件。可在 makefile 中 <BR>如下定义 CFLAGS 变量: <BR>CFLAGS = -g <BR>13.3.4.1 运行 gdb <BR>运行 gdb 调试程序时通常使用如下的命令: <BR>gdb progname <BR>执行上述命令之后,gdb 将显示一个命令提示行: <BR>[WeiYM@rocket src]$ gdb testgui <BR>GNU gdb 4.17.0.4 with Linux/x86 hardware watchpoint and FPU support <BR>Copyright 1998 Free Software Foundation, Inc. <BR>GDB is free software, covered by the GNU General Public License, and you are <BR>welcome to change it and/or distribute copies of it under certain conditions. <BR>Type "show copying" to see the conditions. <BR>There is absolutely no warranty for GDB. Type "show warranty" for details. <BR>This GDB was configured as "i386-redhat-linux"... <BR>(no debugging symbols found)... <BR>(gdb) <BR>(gdb) 就是 gdb 的提示符。在 gdb 提示符处键入help,将列出命令的分类,主要的分 <BR>类有: <BR>? aliases:命令别名 <BR>? breakpoints:断点定义; <BR>? data:数据查看; <BR>? files:指定并查看文件; <BR>? internals:维护命令; <BR>? running:程序执行; <BR>? stack:调用栈查看; <BR>? statu:状态查看; <BR>? tracepoints:跟踪程序执行。 <BR>键入 help 后跟命令的分类名,可获得该类命令的详细清单。例如,键入 help stack, <BR>将得到如下的命令清单: <BR>(gdb) help stack <BR>Examining the stack. <BR>The stack is made up of stack frames. Gdb assigns numbers to stack frames <BR>counting from zero for the innermost (currently executing) frame. <BR> <BR>(lines deleted) <BR> <BR>List of commands: <BR> <BR>backtrace -- Print backtrace of all stack frames <BR>bt -- Print backtrace of all stack frames <BR>down -- Select and print stack frame called by this one <BR>frame -- Select and print a stack frame <BR>return -- Make selected stack frame return to its caller <BR>select-frame -- Select a stack frame without printing anything <BR>up -- Select and print stack frame that called this one <BR>要退出 gdb 时,只需在提示符处键入 q 并按 Enter 键。 <BR>表 13-4 列出了常用的 gdb 命令。 <BR>表 13-4 常用的 gdb 命令 <BR>命令 <BR>解释 <BR>break NUM <BR>在指定的行上设置断点。 <BR>bt <BR>显示所有的调用栈帧。该命令可用来显示函数的调用顺序。 <BR>clear <BR>删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。 <BR>continue <BR>继续执行正在调试的程序。该命令用在程序由于处理信号或断点而导致停止运行时。 <BR>display EXPR <BR>每次程序停止后显示表达式的值。表达式由程序定义的变量组成。 <BR>file FILE <BR>装载指定的可执行文件进行调试。 <BR>help NAME <BR>显示指定命令的帮助信息。 <BR>info break <BR>显示当前断点清单,包括到达断点处的次数等。 <BR>info files <BR>显示被调试文件的详细信息。 <BR>info func <BR>显示所有的函数名称。 <BR>info local <BR>显示当函数中的局部变量信息。 <BR>info prog <BR>显示被调试程序的执行状态。 <BR>info var <BR>显示所有的全局和静态变量名称。 <BR>kill <BR>终止正被调试的程序。 <BR>list <BR>显示源代码段。 <BR>make <BR>在不退出 gdb 的情况下运行 make 工具。 <BR>next <BR>在不单步执行进入其他函数的情况下,向前执行一行源代码。 <BR>print EXPR <BR>显示表达式 EXPR 的值。 <BR>quit <BR>退出 gdb。 <BR>set variable <BR>设置变量的值,语法为 set variable VAR=VALUE。 <BR>shell CMD <BR>在不退出 gdb 的情况下执行 Shell 命令。 <BR>step <BR>向前执行一行源代码,如果可能,跳入调用函数执行。 <BR>watch VAR <BR>当变量 VAR 的值发生变化时,显示该变量的值。 <BR>where <BR>显示调用序列。根据该命令的输出,可查找程序出问题的地方。 <BR>x/F ADDR <BR>检查内存地址为 ADDR 的内容,F 指定显示的格式。可取 <BR>x:十六进制 o:八进制 d:十进制 <BR>u:无符号十进制 t:二进制 f:浮点数等。 <BR>ADDR 一般取变量名称或指针名称。 <BR> <BR>13.3.4.2 使用 gdb <BR>为了说明 gdb 的使用,我们编写一段有问题的程序,见清单 13-4。 <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -