gpt4 book ai didi

c++ - 使用 Valgrind 工具如何检测哪个对象试图访问 0x0 地址?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:04 26 4
gpt4 key购买 nike

我在尝试调试时得到了这个输出

Program received signal SIGSEGV, Segmentation fault 0x43989029 in
std::string::compare (this=0x88fd430, __str=@0xbfff9060) at
/home/devsw/tmp/objdir/i686-pc-linux-gnu/libstdc++-v3/include/bits/char_traits.h:253

253 { return memcmp(__s1, __s2, __n); }

当前语言:自动;目前是 C++


使用 valgrind 我得到这个输出

==12485== Process terminating with default action of signal 11 (SIGSEGV)
==12485== Bad permissions for mapped region at address 0x0
==12485== at 0x1: (within path_to_my_executable_file/executable_file)

最佳答案

你不需要使用 Valgrind,事实上你想使用 GNU DeBugger (GDB).

如果您通过 gdb (gdb path_to_my_executable_file/executable_file) 运行应用程序并且您已在启用调试的情况下编译应用程序(-g-ggdb 用于 GNU C/C++ 编译器),您可以启动应用程序(在 gdb 提示符下通过 run 命令),一旦到达 SegFault,执行回溯(bt) 来查看程序中名为 std::string::compare 的部分死掉了。

示例 (C):

mctaylor@mpc:~/stackoverflow$ gcc -ggdb crash.c -o crash
mctaylor@mpc:~/stackoverflow$ gdb -q ./crash
(gdb) run
Starting program: /home/mctaylor/stackoverflow/crash

Program received signal SIGSEGV, Segmentation fault.
0x00007f78521bdeb1 in memcpy () from /lib/libc.so.6
(gdb) bt
#0 0x00007f78521bdeb1 in memcpy () from /lib/libc.so.6
#1 0x00000000004004ef in main (argc=1, argv=0x7fff3ef4d848) at crash.c:5
(gdb)

所以我感兴趣的错误位于 crash.c 第 5 行。

祝你好运。

关于c++ - 使用 Valgrind 工具如何检测哪个对象试图访问 0x0 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2601869/

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