Linux下调试编写并调试C语言程序,怎么查看它的内存和CPU信息?GDB中可以实现吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下调试编写并调试C语言程序,怎么查看它的内存和CPU信息?GDB中可以实现吗?相关的知识,希望对你有一定的参考价值。

内存和cpu是硬件的概念,在程序中只有被映射后的内存和线程/进程的概念,具体如何调度程序的内存地址和线程/进程的挂起和运行都是操作系统来做的。使用gdb能够查看当前程序各个变量的内存数据内容此时的内存地址对程序员来说是没什么用的(除非是做硬件开发,可能会需要),gdb还能够查看当前程序中那些线程被挂起或正在运行,但查询不到当前线程在哪个cpu上运行。追问

对啊对啊,就是想看操作系统怎么弄的,比如fork()以后怎么看它占用的内存信息,和CPU是怎么处理的,什么时候挂起什么时候继续执行,还有它占用的内存起始地址多少占了多少,要怎么看呀,Linux就一脸懵逼

追答

回答被采纳,没法直接回复你的追问了,在这里说吧!无论在linux还是windows,你说的要求都是以看不了的。
首先内存在操作系统层面有一个物理地址到逻辑地址的映射,各类硬件设备、虚拟内存都会占用一部分内存地址空间,操作系统会将这些内存地址空间和实际的物理内存一起进行内存管理。所以你看到的内存地址,不一定是真实的物理内存地址看到只是逻辑地址。
在一个,cpu的调度。cpu的调度策略是取决于操作系统核心的,同样的linux,不同的核心版本可能调度cpu的方式都不一样。常用的程序语句sleep()或者互斥锁等等操作都会导致线程挂起,但当你的程序数量多于操作系统cpu数量时,cpu如何调度这些进程或者线程那就没法看到了。
上述两个问题都可以在操作系统原理相关的书籍中找到。建议你去看一下操作系统相关的数据来了解操作系统对内存与cpu的管理策略。当然,书里面的都是比较旧或者比较基础的原理。真正的常用操作系统可能有着自己独特的优化方式。

参考技术A 可以用linux版的QT,很方便的。追问

是嘛,过几天我安装好了再请教

linux c语言编程

一.编写一个C语言程序,用open函数在当前目录下创建一个文件test.txt,然后将数字1~100按顺序写入文件, 之后分别读出第50(从文件开始处计算)、第100个字节处的数字, 并输出该数字到标准输出。然后关闭并删除文件。
要求:.
i. 在Linux操作系统下调试通过后,在试卷上填写你的程序,并写好完整的注释。
ii. 写下你对程序中所使用的open,、write、close等文件系统调用的功能的理解。
iii. 雷同的程序两者都按零分处理。

二. 首先用shell命令在用户主目录下创建一个文件myfile, 然后用C语言编写一个程序打印出该文件的类型和组权限位, 判断该用户对该文件是否有执行权限。如果没有,请通过chmod函数给它加上执行权限。
要求和问题:
i. 你是如何用shell命令创建一个文件的?什么是用户的主目录?
ii. 在Linux操作系统下调试通过后,在试卷上填写你的程序,并写好完整的注释。
iii. 雷同的程序两者都按零分处理。

作业需要两个C程序,应该不难,哪位大哥帮我看看,调试成功后把程序发给我qq6920391 邮箱6920391@qq.com并留下回答者昵称。成功后直接给分。
PS:不要把程序贴到知道上,以免别人复制。程序要原创的。是linux下的C语言编程不是PC下的。有想做的请在知道后跟贴,方便我给您分数。本人linux小白+_+,还有第一题要用到open、write、close等文件系统调用的功能。

那么牛的程序,不像是学校的考试题。
起码是linux 下的C语言编程,搞嵌入式开发的吧。
我也来试试,正想向这个方向研究呢。呵呵

另:公司只能上百度,只能这里给你了.
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#define LEN 100
main()

int fd, len;
int i;
char ch[LEN];
fd=open("test.txt",O_CREAT|O_RDWR,10705);
if(fd)

for(i=1;i<101;i++)

sprintf(ch,"%d",i);
write(fd,ch,strlen(ch));

close(fd);

fd = open("test.txt",O_RDWR);
lseek(fd,50,SEEK_SET);
if(fd)

len = read(fd,ch,1);
ch[len] = '\0';
printf("%s\n",ch);

lseek(fd,100,SEEK_SET);
if(fd)

len = read(fd,ch,1);
ch[len] = '\0';
printf("%s\n",ch);

close(fd);
if(!remove("test.txt"))
printf("test.txt have remove\n");
else
printf("can't remove\n");


这是第一题.
参考技术A 我贴个第二题的吧。
#/bin/sh
cd
touch myfile

============================================================
#include<stdio.h>
#include<sys/stat.h>
#include<stdib.h>
main()

struct stat file;
stat("myfile",&file);
print("The file type is :");
if(S_ISREG(file.st_mode))

print("regular file.");

else if(S_ISREK(file.st_mode))

print("directory.");

else if(S_ISDIR(file.st_mode))

print("block special file.");

else if(S_ISLNK(file.st_mode))

print("symbolic link.");

else

print("other type file.");

printf("\nThe group permission is:");
if(file.st_mode & S_IRGRP)

print("read.");

if(file.st_mode & S_IWGRP)

print ("write.");

if(file.st_mode & S_IXGRP)

print ("execute.");

else

chmod("myfile",file.st_mode|S_IXGRP);
print("\nAdded execute permission.");

参考技术B 雷同的程序两者都按零分处理 参考技术C 有一本《Linux C函数大全》的小册子,Linux的API大多数都有,和MSDN有点相似,LZ看看这个。 参考技术D linux的环境你要是认识了 简单的编程是一样的 第5个回答  2009-04-21 退学吧……

以上是关于Linux下调试编写并调试C语言程序,怎么查看它的内存和CPU信息?GDB中可以实现吗?的主要内容,如果未能解决你的问题,请参考以下文章

devc++ 如何看输出结果

linux c语言编程

使用GNU/gdb调试Linux C/C++可执行程序查看出错源代码、设置断点

linux 下面怎么用gdb调试多个.c文件?

怎样调试C语言的TSR程序

对于C或C++语言,VS下调试如何查看指针数组的所指向的内容?谢谢指导.