导航:首页 > 源码编译 > 获取文件名和行号编译选项

获取文件名和行号编译选项

发布时间:2022-12-13 22:10:55

A. Binutils是什么

目前(2009.9)最新版本为:Binutils (2.19):
ftp://ftp.gnu.org/gnu/binutils/Binutils的内容
Binutils 是一组开发工具,包括连接器,汇编器和其他用于目标文件和档案的工具。安装下列程序: addr2line, ar, as, c++filt, gprof, ld, nm, obj, objmp, ranlib, readelf, size, strings 和 strip安装下列库文件: libiberty.a, libbfd.[a,so] 和 libopcodes.[a,so] 简短说明
addr2line 把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。ar 建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。as 主要用来编译GNU C编译器gcc输出的汇编文件,产生的目标文件由连接器ld连接。c++filt 连接器使用它来过滤 C++ 和 Java 符号,防止重载函数冲突。gprof 显示程序调用段的各种数据。ld 是连接器,它把一些目标和归档文件结合在一起,重定位数据,并链接符号引用。通常,建立一个新编译程序的最后一步就是调用ld。nm 列出目标文件中的符号。obj把一种目标文件中的内容复制到另一种类型的目标文件中.objmp 显示一个或者更多目标文件的信息。显示一个或者更多目标文件的信息。使用选项来控制其显示的信息。它所显示的信息通常只有编写编译工具的人才感兴趣。ranlib 产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。readelf 显示ebf格式可执行文件的信息。size 列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。strings 打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以使用选项-n设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很有帮助。

B. linux中使用grep命令搜索文件名及文件内容的方法

从文件中搜索并显示文件名
当你从不止一个的文件中搜索时,默认它将显示文件名:
代码如下:
grep
word
文件名
grep
root
/etc/*
示例输出:
代码如下:
/etc/bash.bashrc:
See
man
sudo_root
for
details.
/etc/crontab:17
*
*
*
*
root
cd
/
run-parts
--report
/etc/cron.hourly
/etc/crontab:25
6
*
*
*
root
test
-x
/usr/sbin/anacron
||
(
cd
/
run-parts
--report
/etc/cron.daily
)
/etc/crontab:47
6
*
*
7
root
test
-x
/usr/sbin/anacron
||
(
cd
/
run-parts
--report
/etc/cron.weekly
)
/etc/group:root:x:0:
grep:
/etc/gshadow:
Permission
denied
/etc/logrotate.conf:
create
0664
root
utmp
/etc/logrotate.conf:
create
0660
root
utmp
每行开始的第一个部分是文件名(如:/etc/crontab、/etc/group)。使用
-l
选项可以只显示文件名:
代码如下:
grep
-l
string
filename
grep
-l
root
/etc/*
示例输出:
代码如下:
/etc/aliases
/etc/arpwatch.conf
grep:
/etc/at.deny:
Permission
denied
/etc/bash.bashrc
/etc/bash_completion
/etc/ca-certificates.conf
/etc/crontab
/etc/group
你也可以逆转输出;使用
-L
选项来输出那些不匹配的文件的文件名:
代码如下:
grep
-L
word
filename
grep
-L
root
/etc/*
示例输出:
代码如下:
/etc/apm
/etc/apparmor
/etc/apparmor.d
/etc/apport
/etc/apt
/etc/avahi
/etc/bash_completion.d
/etc/bindresvport.blacklist
/etc/blkid.conf
/etc/bluetooth
/etc/bogofilter.cf
/etc/bonobo-activation
/etc/brlapi.key
根据文件内容查找文件
输入以下命令:
代码如下:
grep
'string'
*.txt
grep
'main('
*.c
grep
'#include'
*.c
grep
'getChar*'
*.c
grep
-i
'ultra'
*.conf
grep
-iR
'ultra'
*.conf
其中
-i

忽略模式(匹配字符串
valid、
VALID、
ValID
)和输入文件(匹配
file.c
FILE.c
FILE.C)的大小写。
-R

递归读取每个目录下的所有文件。
高亮匹配到的模式
在搜索大量文件的时候你可以轻松地高亮模式:
代码如下:
$
grep
--color=auto
-iR
'getChar();'
*.c
为查找到的模式显示文件名和行号
你也许需要显示文件名和行号:
代码如下:
$
grep
--color=auto
-iRnH
'getChar();'
*.c
其中,
-n

在输出的每行前面添加以
1
开始的行号。
-H

为每个匹配打印文件名。要搜索多个文件时这是默认选项。(LCTT
译注:-h
选项强制隐藏文件名;另外
-l

-L
选项用于仅显示匹配/不匹配的文件名,而
-H

-h用于控制在显示匹配行前显示/不显示文件名,注意区分。)
代码如下:
$grep
--color=auto
-nH
'DIR'
*
输出样例:
你也可以使用
find
命令:
代码如下:
$
find
.
-name
*.c
-print
|
xargs
grep
main(

C. 请问linux下,gcc编译程序的过程(从读取源文件到制作可执行程序中间所有过程,越详细越好)

gcc -S *.c 预处理+反汇编

D. C中_FILE_和_LINE_怎么用

  1. 这是编译器内置宏,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。例如:

    printf("FILE: %d, LINE: %d, %s/n", "__FILE__, __LINE__, "这里写上相关信息");


  2. ANSI C标准中几个标准预定义宏:

__LINE__:在源代码中插入当前源代码行号;

__FILE__:在源文件中插入当前源文件名;

__DATE__:在源文件中插入当前的编译日期

__TIME__:在源文件中插入当前编译时间;

__STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1;

__cplusplus:当编写C++程序时该标识符被定义。

E. 如何在flex中获取当前文档的名字和所执行的函数所在的行号

具我所知是不能的,你编译以后文件就不是你当前命名的*.MXML了,所以文档名不能获得,具我所知也没有这样的函数方法。不过如果你只是在FLEX BUILDER中,抬头看最上边的菜单栏就看到了。
函数所在的行号也应该不可通过方法获得,你如果是调试可以双击行号左边的地方添加断点,然后用DEBUG运行就可以停在那地方。

F. 如何在Java中获取当前代码行行号和文件名

如果你用的是Eclipse或MyEclipse,在代码的左边(就是有加号或减号,用于缩放代码的位置)点右键将ShowLineNumbers打上对勾就可以看见行号了,文件名看包。

G. c语言如何打印出当前源文件的文件名以及源文件的当前行号

需要准备的材料分别有:电脑、C语言编译器。

1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。

H. Swift 如何获取当前代码的函数名和行号

#file 用于获取当前文件文件名
#line 用于获取当前行号
#column 用于获取当前列编号
#function 用于获取当前函数名

写一个调试输出日志的方法:

工具类StringFormatterUtils

I. gcc中如何定位文件名和行号的,比如__FILE__和__LINE__的内容存在什么地方,如何能够直接获取。

__FILE__ 和 __LINE__ 这两个“特定”宏,会被编译器在 “预处理” (prepreocessing) 这一步,由编译器替换成对应的文件名和行号。

用户自己定义的宏,比如
#define NUMBER 25
也是在这一步进行替换的。

具体,你可以用 gcc -E file.c 来查看,你会发现在这一步,各种宏都会被替换成实际的内容。

J. python中怎么打印行号和文件名

通过调用堆栈里面的代码对象来获取。

一般是自己引发一个异常,然后捕获这个异常,在异常处理中通过堆栈信息获得行号。

比如:

try:
raiseZeroDivisionError
exceptZeroDivisionError:
frame=sys.exc_info()[2].tb_frame.f_back
returnframe.f_lineno

如果需要更多的信息,可以通过inspect模块的stack()方法获得整个调用栈。可自定义一个exception类型。

importinspect
classMyErrorCode(object):
STANDARD=0x0001

code_map_msg={
MyErrorCode.STANDARD:"standarderror",
}
classMyError(Exception):
def__init__(self,error_code):
self.error_code=error_code
try:
_current_call=inspect.stack()[1]
_iframe=_current_call[0]
self.line_no=_iframe.f_lineno
self.mole_name=_iframe.f_globals.get("__name__","")
self.method_name=_current_call[3]
self.class_name=_iframe.f_locals.get("self",None).__class__.__name__
except(IndexError,AttributeError):
self.line_no=""
self.mole_name=""
self.method_name=""
self.class_name=""

def__repr__(self):
msg=code_map_msg.get(self.error_code,"")
return"[*]MyError:%s>%s.mole:%s,class:%s,method:%s,line:%s"%(self.error_code,msg,self.mole_name,self.class_name,self.method_name,self.line_no)

def__str__(self):
returncode_map_msg.get(self.error_code,"notfindanymatchmsgforcode:%s"%self.error_code)

然后在需要获取行号的地方引发这个异常并捕获它,然后从异常对象中获取line_no.

阅读全文

与获取文件名和行号编译选项相关的资料

热点内容
文件夹变成了 浏览:558
linuxpython绿色版 浏览:431
怎么下载小爱同学音箱app 浏览:554
python占位符作用 浏览:76
javajdbcpdf 浏览:541
php网页模板下载 浏览:192
python试讲课pygame 浏览:409
安居客的文件夹名称 浏览:677
家里服务器如何玩 浏览:449
网站源码使用视频 浏览:746
stc89c52单片机最小系统 浏览:452
邮件安全证书加密 浏览:416
云服务器如何访问百度 浏览:279
常州电信服务器dns地址 浏览:839
用小方块制作解压方块 浏览:42
图像压缩编码实现 浏览:68
特色功能高抛低吸线副图指标源码 浏览:71
西方哲学史pdf罗素 浏览:874
python最常用模块 浏览:184
温州直播系统源码 浏览:112