(金慶的專欄 2019.9)
主函式中的異常生成core檔案能看到呼叫棧,
但是 std::thread 子執行緒中的異常生成 core 檔案的呼叫棧如下:
program received signal sigabrt, aborted.
[switching to thread 0x7f18f00ab700 (lwp 32340)]
0x00007f19007335f7 in raise () from /lib64/libc.so.6
(gdb) bt
#0 0x00007f19007335f7 in raise () from /lib64/libc.so.6
#1 0x00007f1900734ce8 in abort () from /lib64/libc.so.6
#2 0x00007f19010379d5 in __gnu_cxx::__verbose_terminate_handler() () from /lib64/libstdc++.so.6
#3 0x00007f1901035946 in ?? () from /lib64/libstdc++.so.6
#4 0x00007f1901035973 in std::terminate() () from /lib64/libstdc++.so.6
#5 0x00007f190108c2b5 in ?? () from /lib64/libstdc++.so.6
#6 0x00007f19012e7dc5 in start_thread () from /lib64/libpthread.so.0
#7 0x00007f19007f41cd in clone () from /lib64/libc.so.6
(gdb)
呼叫棧丟失使除錯無法找到問題點。
據說 gcc 8 修正了該問題。
參考:
std thread中獲取當前執行緒的系統id
std thread不提供獲取當前執行緒的系統id的方法,僅可以獲取當前的執行緒id,但是我們可以通過建立索引表的方式來實現 1 std mutex m 2 std mapthreads 3void48 void wrap void f 9 而後用其建立執行緒 1 std thread t1 wra...
異常 C 中的異常
本文參照於狄泰軟體學院 c 深度剖析課程 之前我們分析了c語言中異常處理的方式,基本沒有好的解決方案。那麼c 中會如何優化c語言對異常的處理的缺陷呢?c 內建了異常處理的語法元素try catch try語句處理正常 邏輯 catch語句處理異常情況 try語句中的異常由對應的catch語句處理 t...
java中異常處理中的異常匹配
先貼上 class annoyance extends exception class sneeze extends annoyance public class test catch sneeze s catch annoyance a catch派生物件 trycatch annoyance a...