Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
10年もののバグを退治した話
Search
n-seki
December 23, 2024
Technology
0
230
10年もののバグを退治した話
n-seki
December 23, 2024
Tweet
Share
More Decks by n-seki
See All by n-seki
永続化、なに使おう?
n_seki
0
300
OS間でBluetooth処理を(一部)共通化している話
n_seki
0
100
やってみようMaven!
n_seki
0
350
Try Android Health Connect
n_seki
0
93
Other Decks in Technology
See All in Technology
アノテーション作業書作成のGood Practice
cierpa0905
PRO
1
350
戦えるAIエージェントの作り方
iwiwi
19
8.7k
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
350
マルチエージェントのチームビルディング_2025-10-25
shinoyamada
0
240
IBC 2025 動画技術関連レポート / IBC 2025 Report
cyberagentdevelopers
PRO
2
240
プロファイルとAIエージェントによる効率的なデバッグ / Effective debugging with profiler and AI assistant
ymotongpoo
1
650
re:Invent 2025の見どころと便利アイテムをご紹介 / Highlights and Useful Items for re:Invent 2025
yuj1osm
0
530
AIでデータ活用を加速させる取り組み / Leveraging AI to accelerate data utilization
okiyuki99
6
1.6k
AIとの協業で実現!レガシーコードをKotlinらしく生まれ変わらせる実践ガイド
zozotech
PRO
2
240
OpenCensusと歩んだ7年間
bgpat
0
300
新米エンジニアをTech Leadに任命する ー 成長を支える挑戦的な人と組織のマネジメント
naopr
1
340
SOTA競争から人間を超える画像認識へ
shinya7y
0
660
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
34
2.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
The Language of Interfaces
destraynor
162
25k
Writing Fast Ruby
sferik
630
62k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Visualization
eitanlees
150
16k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Site-Speed That Sticks
csswizardry
13
940
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
2
210
Git: the NoSQL Database
bkeepers
PRO
431
66k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Transcript
STORES 株式会社 Ebisu.mobile #8 大忘年会 2024年 12月 20日 ・ Naoto
Uwaseki 10年もののバグを退治した話
• 上関直人/うわせき なおと • STORES 決済/Androidエンジニア • アイコンはモルモット • 趣味
◦ エレキギター ᷚ🎸 自己紹介 2
STORES 決済 の紹介 3
STORES 決済 の技術の紹介 4 決済アプリ 決済端末 レシート プリンター サーバー •
Bluetooth接続 • コマンド生成をC言語でライブラリ化
10年もののバグ退治......その経緯 5 • 最初に問題を検知したのは2020年 ◦ Android10の端末でクラッシュが発生している ◦ ネイティブクラッシュということだけが分かった • Android側のバグだろうか?と思って様子を見ていた......
ネイティブクラッシュ C言語などのネイティブコードでのクラッシュこと。
10年もののバグ退治......その経緯 6 ところが、、、
10年もののバグ退治......その経緯 7 • 一向に解消しない 😨 • 断続的に調査を行うものの有益な情報は得られず • なにかしら発生条件があるらしい ◦
クラッシュ率自体は高くなかった
10年もののバグ退治......その経緯 8 2024年 真剣に向き合おうと決意 🔥
10年もののバグ退治......クラッシュレポートから分かること 9 • ネイティブクラッシュをFirebase Crashlyticsに送る
10年もののバグ退治......クラッシュレポートから分かること 10 • ネイティブクラッシュをFirebase Crashlyticsに送る
10年もののバグ退治......クラッシュレポートから分かること 11 • ネイティブクラッシュをFirebase Crashlyticsに送る
10年もののバグ退治......クラッシュレポートから分かること 12 • ネイティブクラッシュをFirebase Crashlyticsに送る
10年もののバグ退治......傾向・条件をつかむ! 13 • スタックトレースからは何も情報が得られなかった • FirebaseにはユーザーIDを送っている 💡 ◦ 他のログと突き合わせることで情報が増える ◦
クラッシュの傾向・条件がつかめないだろうか......?
10年もののバグ退治......傾向・条件をつかむ! 14 • クラッシュしたユーザーはプリンターを利用している! ◦ プリンターのモデルはバラバラ • 印刷処理に何かしら問題がある......?
STORES 決済 の技術の紹介 15 決済アプリ 決済端末 レシート プリンター サーバー •
Bluetooth接続 • コマンド生成をC言語でライブラリ化
10年もののバグ退治......泥臭いデバッグ 16 • プリンターへ送るコマンドの生成処理を C言語 で実装、 ライブラリ化して利用している ◦ とても怪しい •
二分探索的にコードをコメントアウト -> 実行......という 泥臭い作業のすえクラッシュを引き起こす関数を特定 💪
10年もののバグ退治......原因特定! 17 • 社内ライブラリの印刷データの作成処理にバグがあった • 具体的にはmemset関数の使い方が誤っていた ◦ バッファーオーバーフローが発生 😱 バッファーオーバーフロー
プログラムがバッファに割り当てられた空間よりも大きなデータを書き込むことで、 データがバッファ境界からあふれ、バッファの範囲外のメモリを上書きし、元々その メモリにあったデータを破壊してしまうことを指す。 (Wikipedia・バッファオーバーフロー)
10年もののバグ退治......原因特定! 18 • 非常に単純化すると、以下のような実装があった memset(アドレス, 1バイトの値, 3) • アドレスが指す領域に、1バイトの値を、3バイト分書く •
なぜか「3」がハードコーディングさていた 🤔🤔🤔
10年もののバグ退治......原因特定! 19 • なぜか「3」がハードコーディングさていた 🤔🤔🤔 memset(アドレス, 1バイトの値, 3) • 1バイトの値を1バイト書き込むことを前提に領域確保
• 2バイト余分に書き込むのでバッファーオーバーフロー
10年もののバグ退治......対応をリリース 20 • 想定外の領域の値が書き換わってしまったことが原因 ◦ 書き換わった領域が参照されるとクラッシュ ▪ 発生率の低さ & 謎のスタックトレースの要因
• ライブラリ実装当初からこうなっていた ◦ 10年以上前! • 1行修正してリリースすると......
10年もののバグ退治......対応をリリース 21
10年もののバグ退治......対応をリリース 22 倒せた 🎉
10年もののバグ退治からの教訓 23 • スタックトレースが理解不能でも慌てない 👌 • 特殊なクラッシュでもツールを駆使して情報を増やす 💡 • 他の情報と組み合わせることで発生条件を絞り込める
💡 • 諦めない気持ち ✊
10年もののバグを退治した話 24 完