如何查看*** stack smashing detected ***: terminated报错在哪个位置
时间: 2023-09-03 08:12:13 浏览: 48
"*** stack smashing detected ***: terminated" 报错通常是由堆栈溢出引起的,这种错误通常是由数组越界或者指针操作错误引起的。编译器会在发现这种错误时输出这个报错信息。
要查看报错位置,可以使用调试器(如gdb)进行调试。在编译时需要开启调试信息选项,即使用 gcc 编译时加上 -g 选项,例如:
```
gcc -g -o program program.c
```
然后使用 gdb 打开程序:
```
gdb program
```
在 gdb 中运行程序,当报错时程序会停止在报错位置,这时可以使用 backtrace 命令查看堆栈信息,定位到报错位置。例如:
```
Program received signal SIGABRT, Aborted.
0x00007ffff7a16425 in raise () from /usr/lib/libc.so.6
(gdb) backtrace
#0 0x00007ffff7a16425 in raise () from /usr/lib/libc.so.6
#1 0x00007ffff7a17b8b in abort () from /usr/lib/libc.so.6
#2 0x00007ffff7a53e0e in __libc_message () from /usr/lib/libc.so.6
#3 0x00007ffff7a5b7c7 in __stack_chk_fail () from /usr/lib/libc.so.6
#4 0x00005555555547f1 in main () at program.c:5
```
在 backtrace 输出中,最后一行显示了报错位置所在的文件和行号。