gpt4 book ai didi

linux - 为什么我不能在 linux 中的 fopen 设置断点

转载 作者:太空狗 更新时间:2023-10-29 11:46:44 25 4
gpt4 key购买 nike

这是我的代码:

#include <stdio.h>
int main()
{
fopen("./1.txt","r");
printf("hello");
return 0;
}

$g++ -g -o m main.cpp

$gdb ./m
(gdb) b fopen
Breakpoint 1 at 0x804842c
(gdb) b printf
Breakpoint 2 at 0x804843c
(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep y 0x0804842c <fopen@plt>
2 breakpoint keep y 0x0804843c <printf@plt>
(gdb) r

似乎函数 fopen 的断点永远不起作用,但 printf 的断点工作正常。为什么?

谢谢

最佳答案

这是 GDB 中的一个错误,似乎已在当前 CVS 源中修复(截至 20120124)。

问题是 Linux 上的 32 位 libc.so.6 中有 两个 版本的 fopen ,而 GDB 用于选择错误的:

nm -D /lib32/libc.so.6 | grep '\<fopen\>'
0005d0c0 T fopen
00109750 T fopen

readelf -s /lib32/libc.so.6 | egrep '0005d0c0|00109750'
181: 0005d0c0 50 FUNC GLOBAL DEFAULT 12 fopen@@GLIBC_2.1
182: 00109750 136 FUNC GLOBAL DEFAULT 12 fopen@GLIBC_2.0
679: 0005d0c0 50 FUNC GLOBAL DEFAULT 12 _IO_fopen@@GLIBC_2.1
680: 00109750 136 FUNC GLOBAL DEFAULT 12 _IO_fopen@GLIBC_2.0

如果您还在 main 上中断,并重复 info break,您将看到 GDB 在 fopen@GLIBC_2.0 上设置了断点>,但调用的函数是 fopen@@GLIBC_2.1

关于linux - 为什么我不能在 linux 中的 fopen 设置断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9155874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com