(σ゚∀゚)σ
[廢]
新知雜
(σ゚∀゚)σ
這幾天同事在改 code 改壞了,但壞的方式很荒謬,筆記一下
(σ゚∀゚)σ
應該是那附近的 code 是蠻久以前寫的 or 其他考量
所以在處理 exception 的時候用的不是 c++ 的 try catch
而是微軟自己擴充的
__try
__except
__finally
(σ゚∀゚)σ
這次噴的是這個問題
error C2712: Cannot use __try in functions that require object unwinding
(σ゚∀゚)σ
詳細的我也不清楚
但總之就是在使用 __try 的時候
__try 包起來的 code
(可能包含使用了 __try) 的那個 function 中
不可以有會用到 destructor 的 code
也就是說在這裡面基本上不可以創建 + 銷毀一個 class 的物件
(所以也不能用 string)
(σ゚∀゚)σ
解決方式大概有
1. 不要用 class
2. 把會有 class 的 code 再多包一層 function
3. 把 __try 往外丟之類的
(σ゚∀゚)σ
4. 這次沒用到,不過也可以改 compile 的設定: /EHa
(σ゚∀゚)σ
.
(σ゚∀゚)σ
其他零碎的新知 (zzz
(σ゚∀゚)σ
app 和 service 的差別:
app 跑在個別 user 的 account 底下
service 會跑在 system 底下
(σ゚∀゚)σ
BSOD 的時候可以收 mini dump, kernel dump or full dump
mini dump 只會有 trigger BSOD 的那條 thread 的資訊,有時候會不足以 debug
(σ゚∀゚)σ
在有 kernel dump / full dump 的情況下
下 !process 0 0 可以看到很多東西的資訊 (廢話
(σ゚∀゚)σ
如果出了問題只收了 mini dump,可以去收 System.evt 來看
如果是 memory 不夠之類的問題,會印 log 出來
(σ゚∀゚)σ
想看普通的 app (?) 有沒有 crash 的話可以看 System Info (or msinfo32) 來看系統有沒有噴 error
(σ゚∀゚)σ
前陣子微軟終於肯寫 Windbg 文件了
Getting Started with Windows Debugging - Windows dri...
載入新的回覆