2015-12-22 43 views
5

WinDbgを使用して問題を分析したときに、トレース "AKC!_invoke_watson"が見つかりました。 "_invoke_watson"とは何ですか? このトレースに基づいてAKCアプリの根本的な原因を知る方法は?WinDbgで_invoke_watsonとは何ですか?

DEFAULT_BUCKET_ID: NULL_POINTER_READ_IN_CALL 

LAST_CONTROL_TRANSFER: from 00007ff713fe047e to 00007ff713fe03f4 

STACK_TEXT: 
00000000`0274efe0 00007ff7`13fe047e : 00000000`024a36d8 00000000`ce9f27b4 00000000`024a1ac0 00007ff7`13fe3162 : AKC!_invoke_watson+0x18 
00000000`0274f010 00007ff7`13fe0499 : 00000000`00000130 00000000`0274f190 00000000`ffffffff 00000000`0274f120 : AKC!_invalid_parameter+0x6e 
00000000`0274f050 00007ff7`13fe28a6 : 00000000`00000068 00000000`00000000 00000000`00000225 00000000`0000002a : AKC!_invalid_parameter_noinfo+0x19 
00000000`0274f090 00007ff7`13fdab91 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : AKC!_woutput_s_l+0xb42 
00000000`0274f5b0 00007ff7`13fdac52 : 00000000`024a36d8 00000000`00000409 00000000`00000000 00000000`00000000 : AKC!_vswprintf_helper+0x9d 
00000000`0274f620 00007ff7`13fdac9d : 00000000`024a34b0 00000000`00000000 00000000`00000000 00000000`00000000 : AKC!_vswprintf_s_l+0x42 
00000000`0274f660 00007ff7`13fd7885 : 00000000`0000003e 00000000`024a34b0 00000000`00000000 00000000`00000409 : AKC!vswprintf_s+0x11 
00000000`0274f6a0 00007ff7`13fd40a1 : 00000000`024a34b0 00000000`0274f730 00000000`024a3f90 00000000`024a1a70 : AKC!swprintf_s<260>+0x25 
00000000`0274f6d0 00007ff7`13fd48b6 : 00000000`00000026 00000000`024a34b0 00000000`024a34b0 00007ff7`13ff0550 : AKC!Capture::initTag+0xf1 
00000000`0274f980 00007ff7`13fd345e : 00000000`00000000 00000000`024a34b0 00000000`00000026 00000000`000000c8 : AKC!Capture::funcShow+0x56 
00000000`0274f9b0 00007ffc`21e815dd : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : AKC!Capture::Loop+0x50e 
00000000`0274fa50 00007ffc`229d43d1 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : kernel32!BaseThreadInitThunk+0xd 
00000000`0274fa80 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x1d 


FOLLOWUP_IP: 
AKC!_invoke_watson+18 [f:\dd\vctools\crt_bld\self_64_amd64\crt\src\invarg.c @ 156] 
00007ff7`13fe03f4 ff159ebe0000 call qword ptr [AKC!_imp_GetCurrentProcess (00007ff7`13fec298)] 

FAULTING_SOURCE_LINE: f:\dd\vctools\crt_bld\self_64_amd64\crt\src\invarg.c 

FAULTING_SOURCE_FILE: f:\dd\vctools\crt_bld\self_64_amd64\crt\src\invarg.c 

FAULTING_SOURCE_LINE_NUMBER: 156 

FAULTING_SOURCE_CODE: 
No source found for 'f:\dd\vctools\crt_bld\self_64_amd64\crt\src\invarg.c' 


SYMBOL_STACK_INDEX: 0 

SYMBOL_NAME: akc!_invoke_watson+18 

答えて

10

_invoke_watson()は、あなたのプログラムをクラッシュし、内部でMicrosoft Cランタイム関数です。あなたがこのミニダンプを見せたのはこのことです。面白いことは何も教えてくれません。どうやってスタックトレースを見なければなりません。

AKC!swprintf_s<260>+0x25 

注意関数名の接尾_s、それは)swprintfのsecure version(です:トラブルが始まりました。 sprintf()がバッファの末尾を越えて書き込むことができないようにします。それはでしたバッファの終わりを過ぎて書き込み、クラッシュを引き起こしたものです。また、テンプレート名から260文字のバッファサイズを確認することもできます。

これはWindowsのマジックナンバーで、MAX_PATHの値です。なぜプログラムがクラッシュしたか、それはおそらく259以上の文字を含むファイル名を扱うように求められていたという、かなり良い理論を提供します。一般的なCおよびC++プログラムでは、Windows上のファイルシステムを処理するのに32,767文字までのパスを作成することができます。バックグラウンドis here

この制限を超えないようにプログラムをチェックするだけでなく、より優れた診断結果を得ることができます。クライアントにデータを再編成し、深くネストされたディレクトリにファイルを格納しないように指示するのが最も簡単です。

+0

あなたの答えをありがとう。私はあなたに非常に感謝しています。 –

関連する問題