LINUX下C/C++常见的几种调试程序的方法 第一章:巧用宏变量 __FILE__:记录源代码文件。 __LINE__:记录源代码行数。(是整数类型) __DATE__:记录编译日期。 __TIME__: 记录编译时间 __func__:记录函数 #include <stdlib.h> #include <stdio.h> int main() { printf("Date of make: %s, %s \n"...
(gdb) run // 这时候程序会在第七行停止。 (gdb) p i // 表示打印i的值,p是print的缩写,这时会输出 :$1 = 0 ,即 i == 0 (gdb) p a[i] // 表示打印a[i]的值,p是print的缩写 这时会输出:$2 = 1 ,即 a[i] == 1 (gdb) c // 继续执行,程序会在第七行停止,这时候可以用p命令来...
5、单步执行代码、跳过函数调用等操作 在gdb中,我们可以使用各种命令来控制程序的执行,我们可以使用next命令单步执行下一行代码,或者使用step命令跳过函数调用: next或n:单步执行下一行代码,如果当前行是一个函数调用,那么这个命令会跳入该函数内部,如果当前行没有函数调用,那么这个命令会直接执行下一行代码。 step或s:...
[xiaowp@gary code]$ ld -o hello hello.o 执行 as 命令时带上参数 --gstabs 可以告诉汇编器在生成的目标代码中加上符号表,同时需要注意的是,在用 ld 命令进行链接时不要加上 -s 参数,否则目标代码中的符号表在链接时将被删去。汇编程序员通常面对的都是一些比较苛刻的软硬件环境,短小精悍...
.c是源文件,不是程序,没有可执行权限,所以不能用来调试。应该先用gcc来编译,编译之后的程序就具有可执行权限的。如果我们想用来调试,比如1.c,可以这样gcc 1.c -o 1.out -g然后gdb 1.cgdb的用法自己再去找详细资料吧,一般会用l(list,列出源代码),b(break,设置断点),r(run,运行文件)就可以了。 追问:...
内存和cpu是硬件的概念,在程序中只有被映射后的内存和线程/进程的概念,具体如何调度程序的内存地址和线程/进程的挂起和运行都是操作系统来做的。使用gdb能够查看当前程序各个变量的内存数据内容此时的内存地址对程序员来说是没什么用的(除非是做硬件开发,可能会需要),gdb还能够查看当前程序中那些线程...