【发布时间】:2020-02-09 19:57:02
【问题描述】:
当我在 Mac 终端上使用 lldb 调试我的 .c 文件时,我无法找到分段错误的位置。我已经多次调试代码,但仍然产生相同的错误。有人可以帮我解释为什么我可以找到分段错误的位置。 enter image description here
【问题讨论】:
-
你能把你的调试器输出复制为代码吗?这样会更容易阅读。
标签: debugging segmentation-fault lldb
当我在 Mac 终端上使用 lldb 调试我的 .c 文件时,我无法找到分段错误的位置。我已经多次调试代码,但仍然产生相同的错误。有人可以帮我解释为什么我可以找到分段错误的位置。 enter image description here
【问题讨论】:
标签: debugging segmentation-fault lldb
在不知道您的代码在做什么的情况下,我建议使用像 valgrind 这样的工具,而不仅仅是普通的调试器。它旨在查找 C/C++/FORTRAN 等低级语言的内存问题。例如,它会告诉您是否尝试使用对于数组来说太大的索引。
从quick start guide,试试valgrind --leak-check=yes myprog arg1 arg2
【讨论】:
使用 lldb 中的bt 命令查看调用堆栈。您已经调用了像 scanf() 这样的 libc 函数,并且很可能向它传递了一个无效的参数。当你看到调用堆栈时,你会看到一个堆栈帧,上面有你自己的代码,比如说它是第 3 帧。您可以使用f 3 选择该框架,并可以使用v 命令查看变量以了解传递给导致崩溃的libc 函数的参数。
【讨论】: