C 解释gdb输出
我的程序中有一个segfault,试图通过gdb检测源代码 gdb的O/p如下所示:C 解释gdb输出,c,linux,gdb,C,Linux,Gdb,我的程序中有一个segfault,试图通过gdb检测源代码 gdb的O/p如下所示: [Switching to Thread 0xb6dffb70 (LWP 6448)] #0 0x00adc026 in __strlen_sse2_bsf () from /lib/libc.so/6 #1 0x08049e77 in sim_txn (fd=0x804c5c0) at rand_trace0.c:390 在rand_trace0.c:390 system_call_length = str
[Switching to Thread 0xb6dffb70 (LWP 6448)]
#0 0x00adc026 in __strlen_sse2_bsf () from /lib/libc.so/6
#1 0x08049e77 in sim_txn (fd=0x804c5c0) at rand_trace0.c:390
在rand_trace0.c:390
system_call_length = strlen("rename(")+strlen(filename1)+strlen(",")+strlen(filename)+strlen(")")+1;
在这之前,一切似乎都在运转。
我不知所措。是否
filename1
和filename
都是指向以null结尾的字符串的有效指针?最常见的原因是,如果指针没有正确初始化,或者其中一个字符串没有以null结尾(可能是因为缓冲区溢出),从而导致strlen()
试图读取超过分配内存大小的内容。是否filename1
和filename
都是指向以null结尾的字符串的有效指针?最常见的原因是,如果指针没有正确初始化,或者其中一个字符串没有以null结尾(可能是由于缓冲区溢出),从而导致strlen()
试图读取超过分配内存大小的内容。filename1的值是多少?(不是指针,而是指针指向的数据,直到终止0
)检查文件名和文件名1。它们是有效的C字符串吗?那一行太乱了,为什么不使用sprintf以更清晰的方式创建这一行,然后使用strlen()生成结果?@jcomeau_ictx..我同意…事情加起来就变得一团糟。filename1
的价值是什么?(不是指针,而是指针指向的数据,直到终止0
)检查文件名和文件名1。它们是有效的C字符串吗?那一行太乱了,为什么不使用sprintf以更清晰的方式创建这一行,然后使用strlen()生成结果?@jcomeau_ictx..我同意..事情加起来就一团糟了。