Linux
程序猿BinZoo
这个作者很懒,什么都没留下…
展开
-
关于Segmentation fault (core dumped)几个简单问题的整理
有的程序可以通过编译,但在运行时会出现Segment fault(段错误)。这通常都是指针错误引起的。但这不像编译错误一样会提示到文件一行,而是没有任何信息。一种办法是用gdb的step, 一步一步寻找。但要step一个上万行的代码让人难以想象。 我们还有更好的办法,这就是core file。如果想让系统在信号中断造成的错误时产生core文件, 我们需要在shell中按如下设置:#设置co转载 2013-08-14 11:22:54 · 1735 阅读 · 0 评论 -
Linux统计文件行数
语法:wc [选项] 文件…说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。该命令各选项含义如下: - c 统计字节数。 - l 统计行数。 - w 统计字数。这些选项可以组合使用。输出列的顺序和数目不受选项的顺序和数目的影响。总是按下述顺序显示并且每项最多一列。行数、字数、字节数、转载 2013-11-21 11:53:49 · 2292 阅读 · 0 评论 -
Linux/Unix环境下的make命令详解
无论是在linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要转载 2013-11-07 09:11:19 · 641 阅读 · 0 评论 -
gcc和g++的区别
误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的转载 2013-11-06 21:21:01 · 588 阅读 · 0 评论 -
linux预定义变量$@ $<
$@ : 规则的目标所对应的所有文件$例如:%.o : %.cpp $(HEADERS) $(CXX) $(CXXFlags) $(IncludeDir) -c $解释一下就是:%.o : %.cpp $(HEADERS) $(CXX) $(CXXFlags) $(IncludeDir) -c xxx.cpp -o xxx.o原创 2013-11-07 16:34:28 · 3072 阅读 · 0 评论 -
linux下安装svn 解决svn: Unrecognized URL scheme
svn安装 1、首先下载软件包,我是在weindows上下载后上传到linux下的(可以使用rz命令) 下载地址:http://download.csdn.net/detail/cyteven/65660152、开始安装apr tar zvxf apr-1.4.6.tar.gz //解压 cd apr-1.4.6/ make make install原创 2013-11-17 15:44:42 · 9293 阅读 · 0 评论 -
centos5.4安装g++和gcc
gcc g++安装 包括软件的全包 还等什么 小伙伴们都惊呆了~~原创 2013-12-04 21:06:59 · 2974 阅读 · 0 评论 -
C++编译遇到参数错误(cannot convert parameter * from 'const char [**]' to 'LPCWSTR')
一看到上面的project configuration,有一个Character Set,因此我就对比了我上次编译通过的的工程配置和今天我新建的工程配置,下面是对比的图:第一幅图是今天编译出错时的配置,第二幅是测试上次编译通过时的配置,发现在Character Set选项里有区别,编译出错时是把Character Set设置成了Use Unicode Character Set转载 2013-12-28 21:19:13 · 4873 阅读 · 0 评论 -
Linux下的多线程编程
1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。 为什么有了进程的概念后,还要再引入线程呢?使用转载 2013-12-29 21:01:33 · 656 阅读 · 0 评论 -
多线程及互斥锁整理
多线程及互斥锁整理多线程的创建这个函数是一个应用程序定义的函数的占位符,作为一个线程的起始地址。在调用CreateThread函数时,指定该地址。LPTHREAD_START_ROUTINE类型定义了该回调函数的指针。 ThreadProc是一个应用程序定义的函数的名称的占位符。DWORD WINAPI ThreadProc(LPVOID lpParameter);[1原创 2013-12-30 16:11:12 · 3156 阅读 · 0 评论 -
Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \;find命令的参数;pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。-print: find命令将匹配的文件输出到标准输出。-exec: find命令对匹配的文件执行该参数所给出转载 2013-12-19 16:28:11 · 614 阅读 · 0 评论 -
gdb调试常用指令
一、首先使用gdb调试之前我们生成应用程序需要带有debug信息那么我们在生成可执行程序的时候首先应该带有 -g参数g++ -g server.cpp -o server二、进入gdb模式gdb三、常用命令1、gdb加载可执行文件(gdb) file serverReading symbols from /usr/cyCPP/myServer/server...do原创 2014-01-03 16:17:15 · 2227 阅读 · 0 评论 -
一张图帮你记住linux的vim指令(小伙伴门开来围观吧)
linux的vim那是相当强大,刚开始接触的同学们都会感觉好用但是记不住都是干嘛用的,现在我们就来了解一下非常基本的指令。(今天没时间了,找时间在里面加些例子)查找:/word 向下寻找word?word 向上寻找wordn向下重复查找刚才字符串N向上重复查找刚才字符串:n1,n2s/word1/word2/g 从n1行到n2行之间把word1替换为wo原创 2013-12-18 10:14:30 · 3117 阅读 · 0 评论 -
一张图说build背后的故事
我们在控制台打印hello过程究竟发生了什么事,然我们一起目睹 你们知道我们最平时写的最简单的程序hello都干了什么了吗下面让我们一起来看一下图:编译过程程序:#include using namespace std;#define pi 3.14int main(){ //see helloword in screen原创 2013-12-19 22:40:11 · 1316 阅读 · 0 评论 -
Linux下生成动态链接库是否必须使用 -fPIC 的问题
在 Linux 下制作动态链接库,“标准” 的做法是编译成位置无关代码(Position Independent Code,PIC),然后链接成一个动态链接库。经常遇到的一个问题是 -fPIC 是不是必需,因为好像不加经常也能正常运行,只是创建 .so 的时候会有一个警告。搜索、试验了一下,答案似乎是这样:(1) 通常的建议是始终加上 -fPIC 生成位置无关代码;(2) AMD64转载 2013-11-07 10:26:02 · 788 阅读 · 0 评论 -
linux压缩和解压缩命令大全
.tar 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName --------------------------------------------- .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName转载 2013-11-05 17:07:00 · 479 阅读 · 0 评论 -
c++ 符号表分离———objcopy(调试信息挂载)
最近在做游戏的项目,项目中使用的服务器程序版本是release版本的,最近出现服务器宕机的情况,但是core文件通过gdb查看了一下宕机堆栈结果发现堆栈被破坏,可能的问题就是对指针和数组使用的不规范导致的。然后打算继续通过gdb来调试一下core文件查看一下相关的变量,但是结果令人失望,但是发现debug版本的是可以查看的。比较一下debug和release的区别。release的编译选项中不原创 2013-10-25 20:34:35 · 12354 阅读 · 2 评论 -
Linux信号列表
我们运行如下命令,可看到Linux支持的信号列表:$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV转载 2013-10-10 13:44:53 · 579 阅读 · 0 评论 -
linux core文件介绍
core文件的简单介绍 2007-04-13 12:06:30 Linux联盟收集整理 //---------------------------------------------------------------1. core文件的简单介绍//-------------------------------转载 2013-10-10 18:25:56 · 914 阅读 · 0 评论 -
详谈 UNIX 环境进程异常退出
简介: 本文详细论述 UNIX 环境上的进程异常退出,将导致进程异常退出的各种情景归纳为两类,对每类情况详细分析了问题出现的根本原因,同时添加了相应的实例以易于您更好地进行了解。在此基础上,文章最后论述了应该如何避免和调试进程异常退出问题。希望读者阅读此文后,对进程异常退出问题有更深层的认识,有更系统的梳理,对调试此类进程崩溃问题时也能有所帮助,写出更稳定、更可靠的软件。进程异常退出转载 2013-10-11 12:56:16 · 808 阅读 · 0 评论 -
Linux进程、线程模型,LWP,pthread_self()
一.定义关于进程、轻量级进程、线程、用户线程、内核线程的定义,这个很容易找到,但是看完之后你可以说你懂了,但实际上你真的明白了么?在现代操作系统中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合和资源集合。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共转载 2013-10-24 13:56:50 · 1380 阅读 · 0 评论 -
GDB调试手册
Linux 包含了一个叫gdb 的GNU 调试程序。gdb 是一个用来调试C和C++程序的强力调试器。它使你能在程序运行时观察程序的内部结构和内存的使用情况。以下是 gdb 所提供的一些功能:它使你能监视你程序中变量的值、它使你能设置断点以使程序在指定的代码行上停止执行、它使你能一行行的执行你的代码。在命令行上键入gdb并按回车键就可以运行gdb 了。(Windows需要安装MinGW或者CygW转载 2013-10-24 14:31:27 · 614 阅读 · 0 评论 -
Linux core 文件介绍
1. core文件的简单介绍在一个程序崩溃时,它一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。2. 开启或关闭core文件的生成用以下命令来阻止系统生成core文件:ulimit -c 0下面的命令可以检查生成core文件的选项是否打开:ulimit -a该命令将显示所有的用户定制,其中选项-a代表“a转载 2013-10-24 13:59:06 · 566 阅读 · 0 评论 -
linux下vi命令大全
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复f转载 2013-10-24 14:28:38 · 572 阅读 · 0 评论 -
linux下如何编译c++工程项目
熟悉了Windows平台下编译一个C++工程后,你是否会提出这样一个问题:在Linux平台下又如何编译一个C++工程呢?希望本文能给正在学习或想学习Linux C++开发的你起到抛砖引玉的作用。首先,你必须有一个Linux开发环境,这样才能进行C++开发。笔者用的是安装在虚拟机中的Ubuntu 9.04,Ubuntu操作系统是没带C++编译器g++。在连网的情况下,在终端中使用ro转载 2013-10-28 20:43:58 · 3084 阅读 · 0 评论 -
linux下如何产生core,调试core
在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。1.core文件的生成开关和大小限制 1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。 2)使用ulimit -c filesize命令,可转载 2013-10-29 09:54:34 · 630 阅读 · 0 评论 -
objcopy [选项]... 输入文件 [输出文件]
[功能] 将目标文件的一部分或者全部内容拷贝到另外一个目标文件中,或者实现目标文件的格式转换。 [描述] objcopy工具使用BFD库读写目标文件,它可以将一个目标文件的内容拷贝到另外一个目标文件当中。objcopy通过它的选项来控制其不同的动作,它可以将目标文件拷贝成和原来的文件不一样的格式。需要注意的是objcopy能够在两种格式之间拷贝一个完全链接的文件,在两种格式之间转载 2013-10-23 14:30:02 · 3464 阅读 · 0 评论 -
objdump .
因为计算机大都是采用哈佛结构,数据和指令分开存储的的程序组织形式,因此当我门编译,汇编,连接,(符号解吸,段的重定位)。而为了能让程序更好的被执行,最终生成的目标文件包含了足够多了信息生怕自己被歧视而不被执行。所以面对2进制的目标文件来说,我门是很难发现或者看到什么有用的信息,因此objdump这个工具的实际意义是多么的令人喜爱,只有当你要探索一个目标文件的组织形式的时候就能体会了 更多的转载 2013-10-29 21:02:55 · 851 阅读 · 0 评论 -
巧用backtrace系列函数,在不具备gdb环境的Linux系统上大致定位段错误位置
1: 段错误产生的原因简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.一旦一个程序发生了越界访问,系统就采取内存保护措施,并给那个程序发送SIGSEGV信号,程序接到那个信号后就知道segmentation fault出现了。想对”段错误”有更详细的了解可以去阅读“Linux下的段错误产生的原因及调试方法转载 2013-10-29 17:57:50 · 915 阅读 · 0 评论 -
linux下打印函数调用栈(stack backtrace in Linux)
今天遇到个这样的需求,希望能当动态链接库中抛出异常时,能把调用栈打印出来。经过在google上一翻搜寻,找到了一些线索。我的文件目录如下:当前目录下是main.cpp 和test/test下面是A.h, A.cpp(定义一个类)和backtrace.h, backtrace.cpp第一步,实现打印调用栈,backtrace函数实现如下:backtrace.cpp#inclu转载 2013-10-29 18:24:46 · 1834 阅读 · 0 评论 -
gcc 的 -g 和 -ggdb 选项
gcc 的 -g 和 -ggdb 选项 -g 和 -ggdb 都是令 gcc 生成调试信息,但是它们也是有区别的 -g 该选项可以利用操作系统的“原生格式(native format)”生成调试 信息。GDB 可以直接利用这个信息,其它调试器也可以使用这个调试信息 -ggdb 使 GCC 为转载 2013-10-23 20:22:00 · 1332 阅读 · 0 评论 -
在vi按了ctrl+s后 假死
习惯了在windows下写程序,也习惯了按ctrl+s 保存代码,在用vi的时候,也习惯性的按ctrl+s结果就是如同终端死掉了一样。原来:ctrl+s 终止屏幕输出(即停止回显),你敲的依然有效,只是看不见,作用嘛,你登录系统输入密码时,是不是看不见你敲的东东ctrl+q 恢复屏幕输出,你刚才敲的都显示出来了还是对vi不熟悉造成的转载 2013-12-26 14:49:35 · 789 阅读 · 0 评论