今天,当我在
linux上调试我的代码时,我突然发现gdb中的函数地址与nm显示的不同. (可执行文件是静态链接的.)
我认为他们显示的地址应该是相同的,因为它们都是逻辑地址.但今天的发现让我感到困惑.
有人知道他们与众不同的原因吗?
我写了下面这个简单的程序来说明我遇到的情况.
void fo() { return ; } void foo() { fo(); } int add(int a,int b) { foo(); return a + b; } int main() { int a = 1; int b = 2; add(a,b); return 0; }
nm的输出是:
0000000000400584 T _Z2fov 0000000000400595 T _Z3addii 000000000040058a T _Z3foov 00000000004005b3 T main
但是当我使用gdb来调试已编译的可执行文件时,将断点放在第3行.
(gdb) bt #0 fo () at test.cpp:4 #1 0x0000000000400593 in foo () at test.cpp:9 #2 0x00000000004005a8 in add (a=1,b=2) at test.cpp:14 #3 0x00000000004005d8 in main () at test.cpp:22
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。