Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用lldb调试分段故障_C_Lldb - Fatal编程技术网

C 如何使用lldb调试分段故障

C 如何使用lldb调试分段故障,c,lldb,C,Lldb,我通过为我的程序运行LLDB得到了这个异常 然而,这个例外并没有给我任何找到根本原因的具体线索 当然,根据经验,我可能无法正确访问内存 有没有办法通过LLDB找到根本原因?谢谢 continue to play (y/n)? y Process 30020 stopped * thread #1: tid = 0x24b72, 0x00007fff893c8365 libsystem_platform.dylib`_platform_strncmp + 325, queue = 'com.app

我通过为我的程序运行LLDB得到了这个异常

然而,这个例外并没有给我任何找到根本原因的具体线索

当然,根据经验,我可能无法正确访问内存

有没有办法通过LLDB找到根本原因?谢谢

continue to play (y/n)? y
Process 30020 stopped
* thread #1: tid = 0x24b72, 0x00007fff893c8365 libsystem_platform.dylib`_platform_strncmp + 325, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x79)
    frame #0: 0x00007fff893c8365 libsystem_platform.dylib`_platform_strncmp + 325
libsystem_platform.dylib`_platform_strncmp:
->  0x7fff893c8365 <+325>: movzbq (%rsi,%rcx), %r8
    0x7fff893c836a <+330>: subq   %r8, %rax
    0x7fff893c836d <+333>: jne    0x7fff893c837d            ; <+349>
    0x7fff893c836f <+335>: testq  %r8, %r8
(lldb)
error: No auto repeat.
是否继续播放(是/否)?Y
进程30020已停止
*线程#1:tid=0x24b72,0x00007fff893c8365 libsystem_platform.dylib`_platform_strncmp+325,queue='com.apple.main thread',stop reason=EXC_BAD_ACCESS(代码=1,地址=0x79)
帧0:0x00007fff893c8365 libsystem\u platform.dylib`\u platform\u strncmp+325
libsystem\u platform.dylib`\u platform\u strncmp:
->0x7fff893c8365:movzbq(%rsi,%rcx),%r8
0x7fff893c836a:subq%r8,%rax
0x7fff893c836d:jne 0x7fff893c837d;
0x7fff893c836f:testq%r8,%r8
(lldb)
错误:没有自动重复。
代码
#包括
#包括
#包括
#包括
const int USER_INPUT_SIZE_每条线=999;
无效绘制中间线(字符*中间线,整数宽度){
printf(“%s”,中间线);
对于(int i=2;i
函数调用

strncmp(cont, 'y', 1)
可能会导致segfault,因为
'y'
是作为内存位置传递的字符值。我建议

strncmp(cont, "y", 1)
虽然我不确定你比较的意义。无论如何,我建议这样会更好

toupper(cont[0]) == 'Y'
我把比较的意义留给你们。最后,请启用所有可能捕获到此消息的编译器警告。

函数调用

strncmp(cont, 'y', 1)
可能会导致segfault,因为
'y'
是作为内存位置传递的字符值。我建议

strncmp(cont, "y", 1)
虽然我不确定你比较的意义。无论如何,我建议这样会更好

toupper(cont[0]) == 'Y'

我把比较的意义留给你们。最后,请启用所有可能捕获此信息的编译器警告。

您好,谢谢您的好意。分割问题已经解决。然而,有没有办法让这个问题更容易被发现?似乎您是在利用经验来修复它,而不是借助调试器或异常消息^^^编译器确实发出了警告。事实上,MSVC编译器发出了两个警告:一个是关于参数类型,还有一个是关于间接级别的。这个答案仍然没有回答如何用lldb调试这个错误的原始问题…@Dr_Zaszuś这个答案是,你可以在调试之前通过查看编译器输出来捕捉错误。您甚至不应该运行发出警告的代码。捕捉到这个错误并不重要。嗨,谢谢你的好意。分割问题已经解决。然而,有没有办法让这个问题更容易被发现?似乎您是在利用经验来修复它,而不是借助调试器或异常消息^^^编译器确实发出了警告。事实上,MSVC编译器发出了两个警告:一个是关于参数类型,还有一个是关于间接级别的。这个答案仍然没有回答如何用lldb调试这个错误的原始问题…@Dr_Zaszuś这个答案是,你可以在调试之前通过查看编译器输出来捕捉错误。您甚至不应该运行发出警告的代码。捕捉到这个错误是微不足道的。