linuxc调试
⑴ 使用GNU/gdb调试linux C/C++可执行程序查看出错源代码、设置断点
gdb是GNU开源组织发布的一个强大的Linux程序调试工具,比图形化的调试工具更强大,主要来调试C/C++语言程序。
Debug 版本的可执行程序包含调试信息,用于程序员调试程序。
Release 版本的可执行程序往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以方便用户使用。
用gcc/g++编译时,要加上-g选项生成debug版本的可执行程序,否则就无法使用gdb调试了。
r 表示开始run, 如果在运行的过程中发生了错误,比如segmentation fault,可以查看此时的出错源代码:
通过b或者break设置断点,断点的设置可以通过函数名、行号、文件名+函数名、文件名+行号以及偏移量、地址等进行设置。
比如在function Peer_auto_save上设置断点,在peer.c的第136行设置断点:
从断点处继续运行
退出gdb
⑵ linux cmake后怎么调试
1.安装gcc等必备程序包,在cmake安装包的网站中选择binarydistribution下的linuxx86_64下的cmake-3.6.0-Linux-x8664.tar.gz压缩包,点击,下载。默认下载到了home/DOWNLOAD2.把下载好的包复制到指定路径,比如/home/bnu,在当前文件夹中打开终端,输入3.tarzxvfcmake-3.6.0-Linux-x8664.tar.gz在该目录下多了一个解压后的文件夹4.打开新的终端,./bootstrapmakemakeinstall5.此时会打开一个文件/root/.bashrc,找到exportPATH=这些行,在这些行的下面另外添加一行,从而设置环境变量exportPATH=$PATH:/home/bnu/cmake-3.6.0-Linux-x8664/bin输入完毕保存6.查看版本,测试是否安装成功:打开终端,输入cmake--version结果是:cmakeversion3.6.0(安装cmake成功!)要知道,在根目录下安装cmake,那么不同用户都可以共享使用这个cmake.
⑶ linux 下面怎么用gdb调试多个.c文件
Linux 下调试汇编代码既可以用 GDB、DDD 这类通用的调试器,也可以使用专门用来调试汇编代码的 ALD(Assembly Language Debugger)。
从调试的角度来看,使用 GAS 的好处是可以在生成的目标代码中包含符号表(symbol table),这样就可以使用 GDB 和 DDD 来进行源码级的调试了。要在生成的可执行程序中包含符号表,可以采用下面的方式进行编译和链接:
[xiaowp@gary code]$ as --gstabs -o hello.o hello.s
[xiaowp@gary code]$ ld -o hello hello.o
执行 as 命令时带上参数 --gstabs 可以告诉汇编器在生成的目标代码中加上符号表,同时需要注意的是,在用 ld 命令进行链接时不要加上 -s 参数,否则目标代码中的符号表在链接时将被删去。
汇编程序员通常面对的都是一些比较苛刻的软硬件环境,短小精悍的ALD可能更能符合实际的需要,因此下面主要介绍一下如何用ALD来调试汇编程序。首先在命令行方式下执行ald命令来启动调试器,该命令的参数是将要被调试的可执行程序:
[xiaowp@gary doc]$ ald hello
Assembly Language Debugger 0.1.3Copyright (C) 2000-2002 Patrick Alken
hell ELF Intel 80386 (32 bit), LSB, Executable, Version 1 (current)
Loading debugging symbols...(15 symbols loaded)
ald>
当 ALD 的提示符出现之后,用 disassemble 命令对代码段进行反汇编:
ald> disassemble -s .text
Disassembling section .text (0x08048074 - 0x08048096)
08048074 BA0F000000 mov edx, 0xf
08048079 B998900408 mov ecx, 0x8049098
0804807E BB01000000 mov ebx, 0x1
08048083 B804000000 mov eax, 0x4
08048088 CD80 int 0x80
0804808A BB00000000 mov ebx, 0x0
0804808F B801000000 mov eax, 0x1
08048094 CD80 int 0x80
上述输出信息的第一列是指令对应的地址码,利用它可以设置在程序执行时的断点:
ald> break 0x08048088
Breakpoint 1 set for 0x08048088
断点设置好后,使用 run 命令开始执行程序。ALD 在遇到断点时将自动暂停程序的运行,同时会显示所有寄存器的当前值:
ald> run
Starting program: hello
Breakpoint 1 encountered at 0x08048088
eax = 0x00000004 ebx = 0x00000001 ecx = 0x08049098 edx = 0x0000000Fesp = 0xBFFFF6C0 ebp = 0x00000000 esi = 0x00000000 edi = 0x00000000
ds = 0x0000002B es = 0x0000002B fs = 0x00000000 gs = 0x00000000
ss = 0x0000002B cs = 0x00000023 eip = 0x08048088 eflags = 0x00000246
Flags: PF ZF IF
08048088 CD80 int 0x80
如果需要对汇编代码进行单步调试,可以使用 next 命令:
ald> next
Hello, world!
eax = 0x0000000F ebx = 0x00000000 ecx = 0x08049098 edx = 0x0000000Fesp = 0xBFFFF6C0 ebp = 0x00000000 esi = 0x00000000 edi = 0x00000000
ds = 0x0000002B es = 0x0000002B fs = 0x00000000 gs = 0x00000000
ss = 0x0000002B cs = 0x00000023 eip = 0x0804808F eflags = 0x00000346
Flags: PF ZF TF IF
0804808F B801000000 mov eax, 0x1
若想获得 ALD 支持的所有调试命令的详细列表,可以使用 help 命令:
ald> help
Commands may be abbreviated.
If a blank command is entered, the last command is repeated.
Type `help <command>'' for more specific information on <command>.
General commands
attach clear continue detach disassemble
enter examine file help load
next quit register run set
step unload window write
Breakpoint related commands
break delete disable enable ignore
lbreak tbreak
⑷ 在linux中如何编译C程序,使之成为可执行文件如何调试
Gcc最基本的用法是∶gcc [options] [filenames] 其中options就是编译器所需要的参数,filenames给出相关的文件名称。 -c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。 -o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。 -g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。 -O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。 -O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢.
例子:
gcc -o test test.c
结果生成可执行文件test
⑸ 在Linux下如何开发C程序
在Linux开发环境下,GCC是进行C程序开发不可缺少的编译工具。GCC是GNU C Compile的缩写,是GNU/Linux系统下的标准C编译器。虽然GCC没有集成的开发环境,但堪称是目前效率很高的C/C++编译器。《linux就该这么学》非常值得您一看。Linux平台下C程序开发步骤如下:
1.利用编辑器把程序的源代码编写到一个文本文件中。
比如编辑test.c程序内容如下:
/*这是一个测试程序*/
#include<stdio.h>
int main(void)
{
printf("Hello Linux!");
}
2.用C编译器GCC编译连接,生成可执行文件。
$gcc test.c
编译完成后,GCC会创建一个名为a.out的文件。如果想要指定输出文件,可以使用选项-o,命令如下所示:
$gcc-o test1 test.c
这时可执行文件名就变为test1,而不是a.out。
3.用C调试器调试程序。
4.运行该可执行文件。 在此例中运行的文件是:
$./a.out 或者 test1
结果将得出:
Hello Linux!
除了编译器外,Linux还提供了调试工具GDB和程序自动维护工具Make等支持c语言编程的辅助工具。如果想要了解GCC的所有使用说明,使用以下命令:
$man gcc
⑹ 如何在windows上调试Linux上的C程序
首先需要在 WINDOWS 系统下面安装一个 C 语言编译器(例如:Visual C++),然后把 Linux 下的 C 源程序拷贝到 WINDOWS 系统下面,进入 Visual C++ 环境,即可调试 Linux 系统上的 C 源程序。但是在这里注意一点就是:如果你使用的 C 语言的库函数不是标准的 C 库函数,那么在 WINDOWS 下就无法调试通过,也就是说,你必须保证你的 C 源程序是通用的 C 语言代码才行。
⑺ linux 下用gdb进行调试.c程序,执行run命令时提示权限不够,怎么办
.c是源文件,不是程序,没有可执行权限,所以不能用来调试。
应该先用gcc来编译,编译之后的程序就具有可执行权限的。
如果我们想用来调试,比如1.c,可以这样
gcc 1.c -o 1.out -g
然后
gdb 1.c
gdb的用法自己再去找详细资料吧,一般会用l(list,列出源代码),b(break,设置断点),r(run,运行文件)就可以了。
⑻ 如何在Linux 9.0下运用命令进行C语言编程以及编译、调试、运行
shell输入vi text.c 进入vim写代码 写好之后保存
然后输 gcc text.c编译
输 ./a.out 运行
建议你先看看vim使用方法,网上一片一片的...
⑼ 如何在Linux终端中建一个.c文件,并且如何运行调试
打开终端,输入vim/gedit,打开文本编译器
完成编写代码后保存
在终端输入gcc -c process.c -o process -Wall
⑽ linux c语言调试错误
int main(int argc, char **argv)
{
char *p;
int i;
p= (char*) malloc(30); //加类型转换 (char*)
strcpy(p,"not 30 bytes");
printf("p=<%s>\n",p);
if(argc==2){
if(strcmp(argv[1],"-b") ==0) p[0]='a'; //不要漏小括号,下标最大29,这里用0
else if(strcmp(argv[1],"-f")==0){
p[0]='b';
}
}
printf("%s\n",p); //这里输出
free(p); //释放
return 0;
}
输入 程序名 -b, 输出:aot 30 bytes
输入 程序名 -f, 输出:bot 30 bytes