尝试调试时我有这个输出
编程接收信号SIGSEGV,分段故障0x43989029在
std :: string :: compare(this = 0x88fd430,__str = @ 0xbfff9060)在
/家庭/ devsw / TMP / objdir / i686的-PC-Linux的GNU /的libstdc ++ - V3 /包含/比特/ char_traits.h:253253 {return memcmp(__ s1,__s2,__n); }
当前语言:auto;目前是c ++
使用valgrind我得到这个输出
== 12485 ==以信号11(SIGSEGV)的默认动作终止的过程
== 12485 ==地址0x0的映射区域的权限错误 == 12485 ==在0x1 :(在path_to_my_executable_file / executable_file中)
答案 0 :(得分:8)
您不需要使用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
的程序的哪个部分已死亡。< / p>
示例(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行。
祝你好运。答案 1 :(得分:4)
只需在调试器中运行应用程序即可。有一次它会死掉,你将拥有一个包含所需信息的堆栈跟踪。