- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下代码:
#include <stdio.h>
#include <execinfo.h>
#define BACKTRACE_SIZE 10
void log()
{
void *array[BACKTRACE_SIZE];
int s =0;
s = backtrace(array, BACKTRACE_SIZE);
for (int j=1; j<s; j++)
fprintf(stdout," %p ", array[j]);
fprintf(stdout,"\n");
}
void show_1()
{
log();
}
void show_2()
{
log();
}
void show_3()
{
log();
}
void show_4()
{
log();
}
int main (void)
{
show_1();
show_2();
show_3();
show_4();
}
当我编译并运行它时,我得到以下输出:
~ 1064> a.out
0x4006dd 0x4006e9 0x2ab130eec994 0x400599
0x4006d1 0x4006ee 0x2ab130eec994 0x400599
0x4006c5 0x4006f3 0x2ab130eec994 0x400599
0x4006b9 0x4006f8 0x2ab130eec994 0x400599
但是,当我使用 nm 实用程序转储函数地址时说“show_1()”,我得到:
~ 1070> nm -S a.out | grep show_1 | c++filt
00000000004006d4 000000000000000b T show_1()
~ 1071>
但是从程序 stdout 转储中我得到以下输出并在其上运行 addr2line 实用程序:
~ 1067> addr2line -Cfe ./a.out 0x4006dd 0x4006e9 0x2ab130eec994 0x400599
show_1()
??:0
main
??:0
??
??:0
_start
??:0
进一步:
~ 1072> addr2line -Cfe ./a.out 0X4006d4 0x4006dd
show_1()
??:0
show_1()
??:0
第一个输出来自 nm,其他来自程序。
现在实际上我有一个更大的代码面临同样的问题。回溯是巨大的(数据方面),我无法转储所有回溯的 addr2line 输出。我需要一个特定的函数地址来搜索生成的回溯日志,然后在它出现时使用 addr2line。
如何获取与 backtrace()/nm system/binutils 调用/实用程序生成的地址相匹配的特定函数地址?
最佳答案
回溯中的地址不是函数的入口点;它们是调用站点(因此它们是函数中的地址)。这就是回溯的本质。
nm
显示的地址是函数名符号的地址,是函数的入口点。
关于c - nm 和 addr2line 函数地址不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9089499/
我是集群新手。我看不出这两个选项之间的区别?我认为advertise addr被其他节点用来相互通信,listen addr被主机用来加入集群。所以我认为这两个地址永远是相同的。我说得对吗? 最佳答案
关于 Wireshark 中的过滤器,!(ip.addr == 192.0.2.1) 和 (ip.addr != 192.0.2.1) 有什么区别?检查结果时,结果不一样,我不知道为什么... 另外,
在 Ubuntu 16.04 中,我运行了 ifconfig 并在 inet addr:MY_IP 中看到了我的外部 IP。 我试图通过这些方式将它“挖掘”到一个变量中: ipa=$(ifconfig
如何做到这一点?我想知道如何在 Go 中将字符串解析为 net.Addr。如我所见,只有 CIDR、IP 和 MAC 的解析器。 最佳答案 使用 net.Resolve* 函数解析地址。函数返回满足
我正在为一个 friend 编写一个游戏(《我的世界》)的模组。为了执行 mod 的指定功能,我需要确保在特定时间内可以访问服务器,我使用 InetAddress 来执行此操作,但每次使用该命令时都会
我正在学习 C,经过大量研究(阅读 K&R 书(仍在阅读),阅读一些文章和一些关于 SO 的答案)并采取一些措施后,我在真正理解 C 中的数组和指针方面遇到了一些麻烦一路上有大量的笔记,我决定做一个小
在网上冲浪时,我发现了一个发送 GET 请求的 C++ 示例。这段代码中我无法理解的部分是为什么(请参阅粗体部分)变量 addr 是类型转换的。我知道该函数只接受某种类型。但为什么要使用一种类型然后将
当我尝试启动我的数据库时,mongodb 正在记录以下消息: 2014-08-12T08:42:17.522-0300 [initandlisten] journal dir=/www/mongodb
我有一个相当奇怪的用例,我想在发送请求之前覆盖客户端的属性 Grpc.TRANSPORT_ATTR_REMOTE_ADDR 。 在服务器端,我接收来自许多客户端的请求,并使用此属性提取它们的来源。然后
我正在尝试读取一些 xtensa 汇编代码,但被 L32R 指令难住了: 例如给定以下行: 0000 2f04 : 2f0c: ffef21 l32r a2, 2e
当我发现 Addr# 时,我最近一直在寻找各种 Haskell 怪癖,比如未装箱类型等等类型。 GHC.Prim 包是这样描述的: An arbitrary machine address assum
我想通过原始套接字发送 TCP 数据包,然后我被 tcp header 的校验和字段卡住了。由于我不知道如何找出原始套接字使用的实际IP地址,因此似乎不可能构造TCP伪 header 来计算校验和。
我在 Windows 中进行客户端开发,在 Linux 中进行服务器端开发(我以虚拟方式运行)。我的客户端套接字设置为连接到我的 linux 服务器的 inet addr(使用 localhost 似
我想通过这个函数获取页面地址。 virt_to_page(addr); 但是编译的时候出现了这个错误 Error implicit declaration of function virt_to_pa
这个问题在这里已经有了答案: Returning array declared in function returns address of local variable in C? (4 个答案)
我正在开发一个简单的程序,它将获取给定变量的内存地址,最多 64 位(unsigned long)。目前这是我的代码,但出于某种原因,编译器向我发出警告,说我的方法正在返回局部变量的地址,而这正是我想
最近在看《the shellcoder's handbook》这本书,对c的理解很深,但是最近遇到一段代码,看不懂。 这是一段代码: char a[4]; un
我一直在使用 Go 教程 here但是 main 函数的最终版本为我返回了一个错误: $ go build wiki.go # command-line-arguments ./wiki.go:97:
我可以使用 RTTI 和 Addr(Field) 获得相同的字段指针吗? 例如: TSomeClass 私有(private)的 FSomeField:整数; ... 1) MyPointer = A
我必须将这样的字符串“FE80:0000:0000:0000:0000:0000:0000:0012”转换为不带“:”的 const uchar *addr。 我尝试在没有“:”的情况下拆分字符串并像
我是一名优秀的程序员,十分优秀!