c - 使用 GDB : I crash (segfault). 我怎样才能看到导致它的代码行?

标签 c debugging gdb

如果这是重复的,请原谅我 - 但我似乎找不到任何直接的建议。

我有一个多次执行循环的应用程序。在某些时候,这个段错误。它是用 C 语言编写的,我一直在使用 GDB 对其进行调试。以前我打了n百次,这个还是有话要说的。但是,我认为如果我实际上可以后退一步以查看故障发生的位置,那么在当前情况下效率会大大提高。

不幸的是,崩溃中引用了库代码(如果我没记错的话,是从预编译库中引用的)所以我什至无法尝试倒着看代码。而且,我信任这个图书馆。 (当然是现在:P)

如果有人可以提供一些方法来回溯到我的文件中发生此崩溃的代码行,我将不胜感激!

最佳答案

In the past I have been hitting n hundreds of times, and there is something to be said for this.

如果您的崩溃是可重复的(例如,它总是在第 1234 次调用 foo() 后崩溃),那么这里有一个避免命中 的有用技术n 数百次:

(gdb) break foo
(gdb) ignore 1 10000
(gdb) run

此时,您的程序运行并在第 N 次调用 foo 时崩溃。使用 info break 找出 N 是什么。现在:

(gdb) ignore 1 M  # where M == N-1
(gdb) run

现在您在倒数第二次调用 foo 时停止。逐步执行您的代码、设置断点等,直到您到达下一个对 foo 的调用(这将崩溃)。

However, I think it would be VASTLY more efficient in the present case if I could actually step backwards to see where the fault happens.

在 Linux 上你可以这样做:https://rr-project.org/

关于c - 使用 GDB : I crash (segfault). 我怎样才能看到导致它的代码行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54693458/

相关文章:

debugging - 如何在 tvOS 中使用 _whyIsThisViewNotFocusable?

c - gdb nexti 命令不显示源代码行

c - : mean in C? 是什么

c - 如果我们使用 if(a>b>c) # a 大于所有三个结果为 false

c - 在 C 函数中传递字符串

c++ - 为了便于阅读,在 GDB 上缩写 C++ 模板?

c - gdb:线程调试不可用?

c - 函数的返回地址

python - 在 Python 中的另一个函数中获取调用者函数名称?

debugging - isapi 重写调试或测试工具