Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将stacktrace中的数字地址转换为符号?_C_Linux_Debugging_Gdb_Addr2line - Fatal编程技术网

如何将stacktrace中的数字地址转换为符号?

如何将stacktrace中的数字地址转换为符号?,c,linux,debugging,gdb,addr2line,C,Linux,Debugging,Gdb,Addr2line,我有一个程序,它会不时崩溃,并在syslog中显示以下消息 这是否有可能以某种方式修改它,这样就不会有地址,而是有一条关于函数/行崩溃在哪里的可读消息 我可以访问程序源代码,可以通过addr2line查找函数。然而,我感兴趣的是,我想让它解析指向活动函数的指针,这样就可以在syslog中看到它。 请分享你对如何实现这一点的想法 UPD:我发现可以通过注册一个信号处理程序并执行backtrace()函数来实现。这是在不修改程序的情况下实现的方法吗?或者可以做一些一般性的修改,这样每个程序在崩溃时都

我有一个程序,它会不时崩溃,并在syslog中显示以下消息

这是否有可能以某种方式修改它,这样就不会有地址,而是有一条关于函数/行崩溃在哪里的可读消息

我可以访问程序源代码,可以通过addr2line查找函数。然而,我感兴趣的是,我想让它解析指向活动函数的指针,这样就可以在syslog中看到它。 请分享你对如何实现这一点的想法

UPD:我发现可以通过注册一个信号处理程序并执行backtrace()函数来实现。这是在不修改程序的情况下实现的方法吗?或者可以做一些一般性的修改,这样每个程序在崩溃时都会执行回溯

[ 1775.374665] virt-manager[870]: unhandled level 3 translation fault (11) at 0x00000000, esr 0x92000007
[ 1775.383904] pgd = fffffe03dcee0000
[ 1775.387302] [00000000] *pgd=0000004018ea0003, *pud=0000004018ea0003, *pmd=0000004018ea0003, *pte=0000000000000000
[ 1775.397616] 
[ 1775.399119] CPU: 2 PID: 870 Comm: virt-manager Tainted: G        W       4.0.0-0.rc5.git4.1.fc22.aarch64 #1
[ 1775.408843] Hardware name: AppliedMicro Mustang/Mustang, BIOS 1.1.0-rh-0.15 Feb 20 2015
[ 1775.416836] task: fffffe03dc44da80 ti: fffffe03dc3d4000 task.ti: fffffe03dc3d4000
[ 1775.424320] PC is at 0x3ffad37ae5c
[ 1775.427715] LR is at 0x3ffad37ae5c
[ 1775.431128] pc : [<000003ffad37ae5c>] lr : [<000003ffad37ae5c>] pstate: 60000000
[ 1775.438493] sp : 000003ffe89cd3d0
[ 1775.441820] x29: 000003ffe89cd3d0 x28: 000000003ceb0620 
[ 1775.447146] x27: 000000003c9600a0 x26: 0000000000000000 
[ 1775.452490] x25: 000003ffb03b0000 x24: 000000003cdf10a0 
[ 1775.457804] x23: 000003ffb03af000 x22: 000000003cab57a0 
[ 1775.463156] x21: 0000000000000000 x20: 0000000000000001 
[ 1775.468477] x19: 000000003cece200 x18: 000003ffb01e2460 
[ 1775.473819] x17: 000003ffb715b790 x16: 000003ffb03305b0 
[ 1775.479140] x15: 0000000000000020 x14: 0000000000000050 
[ 1775.484479] x13: 000000003ceeca18 x12: 000000003ca86110 
[ 1775.489799] x11: 000000003ceec9e0 x10: 000000003ceeb270 
[ 1775.495142] x9 : 000003ffb7202560 x8 : 0000000000000062 
[ 1775.500464] x7 : 0000000000000199 x6 : 0000000000000199 
[ 1775.505805] x5 : 000000003ca9f280 x4 : 0000000000000000 
[ 1775.511145] x3 : 0000000000000000 x2 : b5107af573d8a600 
[ 1775.516458] x1 : 0000000000000000 x0 : 000000003cacbc20 
[ 1775.521797]
[1775.374665]虚拟机管理器[870]:0x00000000处未处理的3级翻译错误(11),esr 0x9200007
[1775.383904]pgd=FFFFF E03DCEE0000
[1775.387302][00000000]*pgd=0000004018ea0003,*pud=0000004018ea0003,*pmd=0000004018ea0003,*pte=0000000000000000000000
[ 1775.397616] 
[1775.399119]CPU:2 PID:870通信:病毒管理器受污染:G W 4.0.0-0.rc5.git4.1.fc22.aarch64#1
[1775.408843]硬件名称:AppliedMicro Mustang/Mustang,BIOS 1.1.0-rh-0.15 2015年2月20日
[1775.416836]任务:FFFFF E03DC44DA80 ti:FFFFF E03DC3D4000任务。ti:FFFFF E03DC3D4000
[1775.424320]个人计算机位于0x3ffad37ae5c
[1775.427715]LR位于0x3ffad37ae5c
[1775.431128]pc:[]lr:[]pstate:60000000
[1775.438493]sp:000003ffe89cd3d0
[1775.441820]x29:000003ffe89cd3d0 x28:00000000 3CEB0620
[1775.447146]x27:00000000 3C9600A0 x26:0000000000000000
[1775.452490]x25:000003ffb03b0000 x24:00000000 3CDF10A0
[1775.457804]x23:000003FFB03AF000X22:000000003cab57a0
[1775.463156]x21:0000000000000000 x20:00000000000000001
[1775.468477]x19:00000000 3CECE200 x18:000003ffb01e2460
[1775.473819]x17:000003ffb715b790 x16:000003ffb03305b0
[1775.479140]x15:00000000000000 20 x14:00000000000000 50
[1775.484479]x13:00000000 3CEECA18 x12:00000000 3CA86110
[1775.489799]x11:00000000 3CEEC9E0 x10:00000000 3CEEB270
[1775.495142]x9:000003ffb7202560 x8:00000000000000 62
[1775.500464]x7:0000000000000199 x6:0000000000000199
[1775.505805]x5:00000000 3CA9F280 x4:0000000000000000
[1775.511145]x3:0000000000000000 x2:b5107af573d8a600
[1775.516458]x1:0000000000000000 x0:00000000 3CACBC20
[ 1775.521797]

甚至可以捕获核心文件,并为每个核心自动运行一个程序……您可能想使用libSegFault.so。看,谢谢!尽管如此,即使启用了此选项,它也会以数字形式输出地址,而不是回溯中的文件+行号。您需要在启用调试信息的情况下构建非剥离二进制文件(使用
-g
选项)。