小编rad*_*dix的帖子

gdb 错误:回溯停止:前一帧与此帧相同(堆栈损坏?)

我在 ARMv7 目标上调试多线程 C++ 应用程序时遇到问题。该问题出现在两个不同的 ARM 目标上,我为它们使用了不同的工具链:

Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Run Code Online (Sandbox Code Playgroud)

我检查了一些线程,但是(由于与简约的多线程程序存在相同的问题)似乎我 * 没有损坏的堆栈 * 虚拟函数或函数指针的任何问题

我主要使用目标Toradex Colibri iMX6,它运行着Angstrom Linux 2016.12

问题

  • 我构建程序的方式有问题吗?
  • 有什么东西吗?我使用gdbserver/ 的方式有问题gdb吗?
  • 我必须使用哪些选项来修复调试器输出?

gdbserver在目标上调试通过,工具链arm-linux-gnueabihf-gdb在我的主机上。gdb任何目标都没有本机。我可以为Linux x86构建应用程序,但目前无法在 PC 上重现该错误。

软件问题

似乎有两个线程卡住了,可能是由于两个互斥锁的死锁,或者一个线程试图第二次获取一个互斥锁(虽然这似乎不太可能,但在我将互斥锁配置为递归后出现了错误; 我将不得不检查该线程中使用的第二个互斥锁)。

所有其他线程似乎都运行良好。

软件构建和调试配置

构建设置:

我正在使用 Toradex 提供的工具链arm-linux-gnueabihf-g++

-std=c++11 -Wall -Werror -Wextra -Wno-unused-result -Winit-self -Wmissing-include-dirs -Wpointer-arith -Wno-format-security -Wno-implicit-fallthrough -Wl,-Map=output.map -ggdb -g3 -fno-inline -O0 …
Run Code Online (Sandbox Code Playgroud)

c++ linux multithreading gdb

5
推荐指数
1
解决办法
6836
查看次数

标签 统计

c++ ×1

gdb ×1

linux ×1

multithreading ×1