centos装gdb(centos安装步骤)

大家好,关于centos装gdb很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于centos安装步骤的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

CentOS下查看CPU信息的详解

我们可以用/proc/cpuinfo查看CPU的信息。该文件包含系统上每个处理器的数据段落。/proc/cpuinfo描述中有6个条目适用于多内核和超线程(HT)技术检查:processor, vendor id, physical id, siblings, core id和cpu cores。

(1)processor:包括这一逻辑处理器的唯一标识符。

(2)physical id:包括每个物理封装的唯一标识符。

(3)core id:保存每个内核的唯一标识符。

(4)siblings:列出了位于相同物理封装中的逻辑处理器的数量。

(5)cpu cores:包含位于相同物理封装中的内核数量。

(6)如果处理器为英特尔处理器,则vendor id条目中的字符串是GenuineIntel。

拥有相同physical id的所有逻辑处理器共享同一个物理插座。每个physical id代表一个唯一的物理封装。Siblings表示位于这一物理封装上的逻辑处理器的数量。逻辑处理器可能支持也可能不支持超线程(HT)技术。每个core id均代表一个唯一的处理器内核。所有带有相同core id的逻辑处理器均位于同一个处理器内核上。如果有一个以上逻辑处理器拥有相同的core id和physical id,则说明系统支持超线程(HT)技术。如果有两个或两个以上的逻辑处理器拥有相同的physical id,但是core id不同,则说明这是一个多内核处理器。cpu cores条目也可以表示是否支持多内核。

一.i386 i586 i686之间的区别

他们指的是适用于intel i386、i586、i686兼容指令集的微处理器。一般来说,等级愈高的机器可接受较低等级的rpm文件。

i386—几乎所有的X86平台,不论是旧的pentum或者是新的pentum-IV与K7系统CPU,都可以正常工作,i指得是Intel兼容的CPU,至于386就是CPU的等级。

i586—就是586等级的计算机,包括pentum第一代MMX CPU,AMD的K5,K6系统CPU(socket7插脚)等CPU都是这个等级。

i686—pentum 2以后的Intel系统CPU及K7以后等级的CPU都属于这个686等级。

你可以透过/proc/cpuinfo这个档案查询你的CPU等级。

二.查看CPU信息

我们可以通过/proc/cpuinfo这个文件来查看CPU的信息。

[root@qs-wgdb-1 proc]# more/proc/cpuinfo

processor: 0

vendor_id: GenuineIntel

cpu family: 6

model: 44

model name: Intel(R) Xeon(R) CPUE5630@ 2.53GHz

stepping: 2

cpu MHz: 2527.071

cache size: 12288 KB

physical id: 1

siblings: 8

core id: 0

cpu cores: 4

apicid: 32

fpu: yes

fpu_exception: yes

cpuid level: 11

wp: yes

flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dt

s acpi mmx fxsr sse sse2 ss ht tm syscall nx pdpe1gb rdtscp lm constant_tsc ida nonstop_tsc arat pni

monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr sse4_1 sse4_2 popcnt lahf_lm

bogomips: 5054.14

clflush size: 64

cache_alignment: 64

address sizes: 40 bits physical, 48 bits virtual

power management: [8]

processor: 1

vendor_id: GenuineIntel

cpu family: 6

model: 44

model name: Intel(R) Xeon(R) CPUE5630@ 2.53GHz

stepping: 2

cpu MHz: 2527.071

cache size: 12288 KB

physical id: 0

siblings: 8

core id: 0

cpu cores: 4

apicid: 0

fpu: yes

fpu_exception: yes

cpuid level: 11

wp: yes

flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dt

s acpi mmx fxsr sse sse2 ss ht tm syscall nx pdpe1gb rdtscp lm constant_tsc ida nonstop_tsc arat pni

monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr sse4_1 sse4_2 popcnt lahf_lm

bogomips: 5054.02

clflush size: 64

cache_alignment: 64

address sizes: 40 bits physical, 48 bits virtual

power management: [8]

processor: 2

vendor_id: GenuineIntel

cpu family: 6

model: 44

model name: Intel(R) Xeon(R) CPUE5630@ 2.53GHz

stepping: 2

cpu MHz: 2527.071

cache size: 12288 KB

physical id: 1

siblings: 8

core id: 1

cpu cores: 4

apicid: 34

fpu: yes

fpu_exception: yes

cpuid level: 11

wp: yes

flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dt

s acpi mmx fxsr sse sse2 ss ht tm syscall nx pdpe1gb rdtscp lm constant_tsc ida nonstop_tsc arat pni

monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr sse4_1 sse4_2 popcnt lahf_lm

bogomips: 5054.04

clflush size: 64

cache_alignment: 64

address sizes: 40 bits physical, 48 bits virtual

power management: [8]

….

processor: 14

vendor_id: GenuineIntel

cpu family: 6

model: 44

model name: Intel(R) Xeon(R) CPUE5630@ 2.53GHz

stepping: 2

cpu MHz: 2527.071

cache size: 12288 KB

physical id: 1

siblings: 8

core id: 10

cpu cores: 4

apicid: 53

fpu: yes

fpu_exception: yes

cpuid level: 11

wp: yes

flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx pdpe1gb rdtscp lm constant_tsc ida nonstop_tsc arat pni monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr sse4_1 sse4_2 popcnt lahf_lm

bogomips: 5054.03

clflush size: 64

cache_alignment: 64

address sizes: 40 bits physical, 48 bits virtual

power management: [8]

processor: 15

vendor_id: GenuineIntel

cpu family: 6

model: 44

model name: Intel(R) Xeon(R) CPUE5630@ 2.53GHz

stepping: 2

cpu MHz: 2527.071

cache size: 12288 KB

physical id: 0

siblings: 8

core id: 10

cpu cores: 4

apicid: 21

fpu: yes

fpu_exception: yes

cpuid level: 11

wp: yes

flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx pdpe1gb rdtscp lm constant_tsc ida nonstop_tsc arat pni monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr sse4_1 sse4_2 popcnt lahf_lm

bogomips: 5053.98

clflush size: 64

cache_alignment: 64

address sizes: 40 bits physical, 48 bits virtual

power management: [8]

三.相关分析

3.1查看服务器位数

[root@qs-wgdb-1 proc]# arch

x86_64

x86_64:64位系统

X86:32位系统

3.2查看CPU是否支持64bit

[root@qs-wgdb-1 proc]# cat/proc/cpuinfo| grep flags| grep' lm'| wc-l

16

结果大于0,说明支持64bit计算. lm指long mode,支持lm则是64bit。

3.3逻辑CPU个数:

[root@qs-wgdb-1 proc]# cat/proc/cpuinfo| grep'processor'| wc-l

16

注意:这里是逻辑CPU。就是我们在cpuinfo中看到的processor.

3.4物理CPU个数:

[root@qs-wgdb-1 proc]# cat/proc/cpuinfo| grep'physical id'| sort| uniq| wc-l

2

这里指的是物理CPU,就是我们在服务器上看到的2个CPU插槽。

3.5每个物理CPU中Core的个数:

[root@qs-wgdb-1 proc]# cat/proc/cpuinfo| grep'cpu cores'| wc-l

16

3.6是否为超线程:

如果有两个逻辑CPU具有相同的”core id”,那么超线程是打开的。每个物理CPU中逻辑CPU(可能是core, threads或both)的个数.

[root@qs-wgdb-1 proc]# cat/proc/cpuinfo| grep'siblings'

siblings: 8

siblings: 8

siblings: 8

siblings: 8

siblings: 8

siblings: 8

siblings: 8

siblings: 8

siblings: 8

siblings: 8

siblings: 8

siblings: 8

siblings: 8

siblings: 8

siblings: 8

siblings: 8

四.CPUID

CPUID是CPU生产厂家为识别不同类型的CPU,而为CPU制订的不同的单一的代码;不同厂家的CPU,其CPUID定义也是不同的;如“0F24”(Inter处理器)、“681H”(AMD处理器),根据这些数字代码即可判断CPU属于哪种类型,这就是一般意义上的CPUID。

由于计算机使用的是十六进制,因此CPUID也是以十六进制表示的。Inter处理器的CPUID一共包含四个数字,如“0F24”,从左至右分别表示Type(类型)、Family(系列)、Mode(型号)和Stepping(步进编号)。

从CPUID为“068X”的处理器开始,Inter另外增加了BrandID(品种标识)用来辅助应用程序识别CPU的类型,因此根据“068X”CPUID还不能正确判别Pentium和Celerom处理器。必须配合BrandID来进行细分。

AMD处理器一般分为三位,如“681”,从左至右分别表示为Family(系列)、Mode(型号)和Stepping(步进编号)。

Type(类型)

类型标识用来区别INTEL微处理器是用于由最终用户安装,还是由专业个人计算机系统集成商、服务公司或制作商安装;数字“1”标识所测试的微处理器是用于由用户安装的;数字“0”标识所测试的微处理器是用于由专业个人计算机系统集成商、服务公司或制作商安装的。我们通常使用的INTEL处理器类型标识都是“0”,“0F24”CPUID就属于这种类型。

Family(系列)

系列标识可用来确定处理器属于那一代产品。如6系列的INTEL处理器包括PentiumPro、PentiumII、PentiumIIXeon、PentiumIII和PentiumIIIXeon处理器。5系列(第五代)包括Pentium处理器和采用MMX技术的Pentium处理器。AMD的6系列实际指有K7系列CPU,有DURON和ATHION两大类。最新一代的INTELPentium4系列处理器(包括相同核心的Celerom处理器)的系列值为“F”

Mode(型号)

型号标识可用来确定处理器的制作技术以及属于该系列的第几代设计(或核心),型号与系列通常是相互配合使用的,用于确定计算机所安装的处理器是属于某系列处理器的哪种特定类型。如可确定Celerom处理器是Coppermine还是Tualutin核心;AthlonXP处理器是Paiomino还是Thorouhgbred核心。

Stepping(步进编号)

步进编号用来标识处理器的设计或制作版本,有助于控制和跟踪处理器的更改,步进还可以让最终用户更具体地识别其系统安装的处理器版本,确定微处理器的内部设计或制作特性。步进编号就好比处理器的小版本号,如CPUID为“686”和“686A”就好比WINZIP8.0和8.1的关系。步进编号和核心步进是密切联系的。如CPUID为“686”的PentiumIII处理器是cCO核心,而“686A”表示的是更新版本cD0核心。

BrandID(品种标识)

INTEL从Coppermine核心的处理器开始引入BrandID作为CPU的辅助识别手段。如我们通过BrandID可以识别出处理器究竟是Celerom还是Pentium4。

总结:

从/proc/cpuinfo这个文件,我们可以看出cpu的信息。这个有2个概念。一个是物理CPU个数和逻辑CPU个数。物理CPU就是我们在主板上卡槽看到CPU的个数。这个可以通过physical id这个进行判断。有几个不同的physical id就有几个物理CPU。至于逻辑CPU个数,我们可以通过processor来判断。这个比较简单。如果有2个物理封装的的CPU,有16个逻辑CPU。那么每个物理封装里面就有8个逻辑CPU。

CentOS7 安装GCC 11

在 CentOS7中安装 GCC 11,首先需了解默认版本为4.8.5,执行相关命令会报错。为解决此问题,应先卸载旧版本。

操作步骤如下:

1.使用命令:sudo yum remove gcc及 sudo yum remove gdb卸载默认版本。

2.验证卸载情况,执行命令:gcc-v g++-v gdb,若无输出,则卸载成功。

3.安装 scl-utils和 centos-release-scl:

sudo yum install scl-utils

sudo yum install centos-release-scl

4.列出所有启用 centos-sclo-rh的包,查找与开发工具链相关的内容。

5.直接下载并安装开发工具链:sudo yum install-y devtoolset-11-toolchain

6.启用 devtoolset-11版本的工具链:sudo scl enable devtoolset-11 bash

7.查看安装的 GCC版本信息:gcc–v

至此,CentOS7中已成功安装并启用 GCC 11,提供了更高的开发效率。此教程仅为参考,具体操作请结合实际环境进行调整。

如何使用gdb调试多进程

在大多数系统,gdb对使用fork创建的进程没有进行特别的支持。当父进程使用fork创建子进程,gdb仍然只会调试父进程,而子进程没有得到控制和调试。这个时候,如果你在子进程执行到的代码中设置了断点,那么当子进程执行到这个断点的时候,会产生一个SIGTRAP的信号,如果没有对此信号进行捕捉处理,就会按默认的处理方式处理——终止进程。

当然,你可以使用时间延迟的方法,在子进程fork出来之后,使用Sleep函数等待一段时间再运行,在这段时间中你使用ps找到该进程,然后使用Attach方法把该进程附加到gdb中,从而达到可以调试子进程的目的。

在一部分系统中(我使用的是基于2.6内核的CentOS,支持follow-fork和detach-on-fork模式),比如HP-UX11.x之后的版本,Linux2.5.60之后的版本,可以使用以下的方法来达到方便的进行多进程调试功能。

默认情况下,父进程fork一个子进程,gdb只会继续调试父进程而不会管子进程的运行。

如果你想跟踪子进程进行调试,可以使用set follow-fork-mode mode来设置fork跟随模式。

set follow-fork-mode所带的mode参数可以是以下的一种:

parent

gdb只跟踪父进程,不跟踪子进程,这是默认的模式。

child

gdb在子进程产生以后只跟踪子进程,放弃对父进程的跟踪。

进入gdb以后,我们可以使用show follow-fork-mode来查看目前的跟踪模式。

可以看到目前使用的模式是parent。

然而,有的时候,我们想同时调试父进程和子进程,以上的方法就不能满足了。Linux提供了set detach-on-fork mode命令来供我们使用。其使用的mode可以是以下的一种:

on

只调试父进程或子进程的其中一个(根据follow-fork-mode来决定),这是默认的模式。

off

父子进程都在gdb的控制之下,其中一个进程正常调试(根据follow-fork-mode来决定)

另一个进程会被设置为暂停状态。

同样,show detach-on-fork显示了目前是的detach-on-fork模式,如上图。

以上是调试fork产生子进程的情况,但是如果子进程使用exec系统函数而装载了新程序执行呢?——我们使用set follow-exec-mode mode提供的模式来跟踪这个exec装载的程序。mode可以是以下的一种:

new当发生exec的时候,如果这个选项是new,则新建一个inferior给执行起来的子进程,而父进程的inferior仍然保留,当前保留的inferior的程序状态是没有执行。

same当发生exec的时候,如果这个选项是same(默认值),因为父进程已经退出,所以自动在执行exec的inferior上控制子进程。

我们可以使用apue里面第8章的例子代码来做测试:

#include"apue.h"

intglob= 6;/* external variable in initialized data*/

charbuf[]="a write to stdout\n";

int

main(void)

{

intvar;/* automatic variable on the stack*/

pid_tpid;

var= 88;

if(write(STDOUT_FILENO, buf, sizeof(buf)-1)!= sizeof(buf)-1)

err_sys("write error");

printf("before fork\n");/* we don't flush stdout*/

if((pid= fork())< 0){

err_sys("fork error");

} else if(pid== 0){/* child*/

glob++;/* modify variables*/

var++;

} else{

sleep(2);/* parent*/

}

printf("pid=%d, glob=%d, var=%d\n", getpid(), glob, var);

exit(0);

}

阅读剩余
THE END