0

你好我的开发人员,

我正在尝试从 C++ 程序分析堆栈转储,在这个特定的程序中,我们正在创建信号处理程序,并且在信号处理程序内部我们有类似下面的代码

res = backtrace(arr, size);
if (res > 0)
{
  btrace = backtrace_symbols(arr, size);
}
for ( unsigned int i =0; i < size ; ++i )
{
    log_error(" trace: %s", btrace[i] );
}

我能够获得跟踪但无法找到我期望的地址,现在我想知道是否有其他线程可能已经填充了堆栈跟踪缓冲区(因为它是嵌入式设备并且我们的缓冲区大小有限),如果那么我如何识别/过滤堆栈跟踪线程,或者是否有任何选项可以将堆栈跟踪限制为仅捕获分段错误的线程。

注意:我能够从堆栈跟踪中存在的可执行文件中识别 2 个地址,最近的一个是信号处理程序本身的地址,第二个来自另一个线程。

我试图在多线程环境中搜索有关回溯如何工作的资源。on 但找不到太多信息,所以我在这里。

谢谢

4

0 回答 0