相关疑难解决方法(0)

GDB损坏了堆栈帧 - 如何调试?

我有以下堆栈跟踪.是否可以从中进行任何有用的调试?

Program received signal SIGSEGV, Segmentation fault.
0x00000002 in ?? ()
(gdb) bt
#0  0x00000002 in ?? ()
#1  0x00000001 in ?? ()
#2  0xbffff284 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
(gdb) 
Run Code Online (Sandbox Code Playgroud)

当我们得到一个时,从哪里开始查看代码Segmentation fault,并且堆栈跟踪不是那么有用?

注意:如果我发布代码,那么SO专家会给我答案.我想从SO那里得到指导并自己找到答案,所以我不会在这里发布代码.道歉.

c recursion gdb

111
推荐指数
4
解决办法
8万
查看次数

在GDB中运行应用程序,直到发生异常

我正在研究多线程应用程序,我想使用GDB进行调试.

问题是,我的一个线程一直在消息中消失:

pure virtual method called
terminate called without an active exception
Abort
Run Code Online (Sandbox Code Playgroud)

我知道该消息的原因,但我不知道我的帖子在哪里发生.回溯真的很有帮助.

当我在GDB中运行我的应用程序时,每次线程暂停或恢复时它都会暂停.我希望我的应用程序继续正常运行,直到其中一个线程因该异常而死亡,此时所有内容都应该暂停,以便我可以获得回溯.

c++ debugging polymorphism gdb multicore

100
推荐指数
4
解决办法
4万
查看次数

如何在GDB中自动打印每条执行的行,直到达到给定的断点?

我希望能够在GDB中设置一个断点,让它运行到那一点 - 并在此过程中,打印出已经"逐步完成"的行.

这是一个例子,基于这个带有a main和a函数的简单文件,每个都有两个断点:

$ cat > test.c <<EOF
#include "stdio.h"

int count=0;

void doFunction(void) {
  // two steps forward
  count += 2;
  // one step back
  count--;
}

int main(void) {
  // some pointless init commands;
  count = 1;
  count += 2;
  count = 0;
  //main loop
  while(1) {
    doFunction();
    printf("%d\n", count);
  }
}
EOF

$ gcc -g -Wall test.c -o test.exe
$ chmod +x test.exe
$ gdb -se test.exe
...
Reading symbols from /path/to/test.exe...done.
(gdb) b …
Run Code Online (Sandbox Code Playgroud)

c debugging automation gdb

26
推荐指数
2
解决办法
1万
查看次数

有没有办法比较两个不同的C/C++程序运行?

所以我正在调试这个程序,这个程序是我从即将毕业的博士生中继承的,或者是在学生完成论文后发生的任何事情.无论如何,现在我有责任进行调试.该程序基本上接受几个文本文件并处理它们.我遇到的问题(段错误)是因为程序试图访问尚未初始化的数组.我想知道是否有任何调试工具可以让你运行程序,并比较程序关闭的两个不同路径.我想我可以手动完成程序,但我宁愿不这样做,因为它相当大,我仍然没有掌握它.我一直在使用GDB和Valgrind(以及使用g ++ -wall来显示警告),这就是我如何做到这一点.

c c++ debugging gdb valgrind

6
推荐指数
2
解决办法
1384
查看次数

标签 统计

gdb ×4

c ×3

debugging ×3

c++ ×2

automation ×1

multicore ×1

polymorphism ×1

recursion ×1

valgrind ×1