C_and_CPP 板


LINE

※ 引述《tanted (為何世界會那麼不單純)》之銘言: : 標題: [問題] 如何追查可能因MutilThtread下stackover : 時間: Sun Jul 23 14:45:15 2023 : : 問題(Question): : 傳入參數被莫名的修改 : : 某個API 如下 : CfaIfmNotifyInterfacStat (u4IfIndex, u1AdminStatus, : &u1OperStatus, u1IsFromMib, : u1IsRegToIp, : &IfInfo)) != CFA_SUCCESS) : : 傳入時的值: : u4IfIndex=43 , u1AdminStatus=1, &u1OperStatus=(UINT1 *) 0xb1e0256f : : 進入API後值卻變成 : https://upload.cc/i1/2023/07/23/ZnvhDF.jpg
: u4IfIndex=0, u1AdminStatus=0 , pu1InOperStatus=0x0, : 前面4個參數都被變成0 : : 請問各位網友其會被修改到的原因 : 是不是因為Mutil thread 所造成 其值被其他thread StackOverflow 修改 : 但由於thread 眾多 各位網友是不是有甚麼的方式或tool : 能介紹給我 去debug 找出是哪個thread 哪段code 所造成 : 謝謝 [deleted] : -- : 推 LPH66: 那我覺得最佳化等級的影響可能會更大 07/24 01:41 : → LPH66: 或者是上面說的 gdb 沒使用對的呼叫慣例去找參數 07/24 01:41 : → LPH66: 每個 thread 會有他自己的 stack, 如果因為堆疊溢位寫到了 07/24 01:43 : → LPH66: 其他 thread 的 stack, 那它其實已經蓋掉更多東西了 07/24 01:43 : → LPH66: 幾乎不可能到了切過去時才會當掉 07/24 01:44 : → LPH66: (如果真蓋掉更多東西, 很高機會會在蓋掉後不久當掉) 07/24 01:44 : → LPH66: 你還是把最佳化選項 (-O3 等) 拔掉後再跑跑看 07/24 01:45 [deleted] : 是toolchain 出了問題造成的嗎 : toolchain 為 toolchain-arm_cortex-a9+vfpv3-d16_gcc-8.4.0_glibc_eabi : 或是編譯時gcc設定參數有關嗎 [deleted] : 前四個參數值不一樣,但後面兩個參數跟上層引數是一樣的。 依你用的toolchain來說, 前四個參數應該是放在 registers: r0, r1, r2, r3, 第五個參數開始會往stack塞,給下一個function取用。 而下一個function也會依序從 r0, r1, r2, r3, stack ... 的方式拿取參數。 至於下一個function會不會在拿取 r0-r3 的參數時也將其放進 stack? 看情況,這要依優化程度和程式碼複雜度而定。 你說第五個參數後的資料是對的,那stack應該沒什麼問題。 正如前一篇推文中的LPH66網友所說,真要蓋掉的話其實很多東西早被蓋掉了。 比較擔心的是可能有 undefined behavior 或是 non-thread-safe 的 code, 然後你 compiler option 又有下相當程度的優化 (e.g. O2 / Ofast / -fstrict-aliasing / -finline-functions...), 這種情況下 r0-r3 會被優化成什麼樣子, 甚至傳給下一個 function 時又會發生什麼變化,都是難以預料的。 舉例來說你本來想寫一段 pooling 的 code 目的是想等 flag 所指到的記憶體內容被其它 thread or process 設為 1 後 再繼續往下走,於是你寫了: // loop until *flag != 0 while(*flag == 0); // do something... 但你會發現 compiler 優化一開下去, 那個 while loop 會永遠處在 infinite loop。 等到你 compiler 用 -S 細看 assembly code 後, 你才知道原來那個 while 被翻成了類似 "b ." 這個永遠跳到自己的指令行為. 所以我建議先要求所有的 code 先用 -O0 -g3 去 build, 過程中要小心 gcc compiler option 的基本原則是: "-Ox 是套餐; -fxxx 是單點" "同層級的優化選項 後面蓋掉前面" (e.g. gcc -O0 -g3 -O2 等價 gcc -g3 -O2) "不同層級的優化選項 -fxxx 會壓過 -Ox 的套餐設定" 試著調整一下你的makefile或是project設定後重新編譯跑跑看吧。 甚至也建議用 -S 來讓 compiler 來產生 assembly code, 然後認真檢視一下是不是在傳參數時發生了什麼意料之外的行為。 祝 debug 順利。 :) --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.249.78.174 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1690994206.A.EDD.html ※ 編輯: jasonwu (111.249.78.174 臺灣), 08/03/2023 00:43:21 ※ 編輯: jasonwu (111.249.78.174 臺灣), 08/03/2023 00:44:12
1F:推 jheli: 認真好文,給推! 08/03 10:17
※ 編輯: jasonwu (111.249.93.245 臺灣), 08/03/2023 10:23:36
2F:→ tanted: 我是原PO 感謝大大分享 因為前些天較忙 所以沒有辦法來看 08/05 01:33
3F:→ tanted: 其實我之前改不同優化程度 發現thread會crash 在其他地方 08/05 01:44
4F:推 v86861062: 推推 08/08 12:16
5F:→ leolarrel: 照你這樣講起來,我覺得是蠻有可能是volatile問題方面 08/16 18:52







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP