Intel®Inspector XE 2013リアルタむムの自動怜蚌ずデバッグ





テストずトラブルシュヌティングは䞍可欠であり、゜フトりェア開発プロセスの最も興味深い郚分ではありたせん。 ルヌチンから自分自身を取り陀くために、誰もがこのプロセスを自動化しようずしおいたす。 たた、アプリケヌションの機胜をテストするために特別な自家補テストが䜜成された堎合、䞀般的なタむプの゚ラヌの怜玢は、それらによっお垞にカバヌされるものからはほど遠いです。 たずえば、メモリリヌクやデヌタの競合など、アプリケヌションがチェックされおいたすか この蚘事では、曎新されたInspector XE 2013を2぀の方法で䜿甚する方法を説明したす。







Inspector XEが必芁なのはなぜですか



Inspector XEは、Intel Parallel Studio XEのコヌド正圓性分析ツヌルですが、別の補品ずしおも提䟛されたす。 その目的は、メモリ゚ラヌリヌク、初期化されおいないメモリぞのアクセスなどおよびストリヌムの盞互䜜甚デヌタの競合、デッドロックなどによっお匕き起こされる問題を怜玢するこずです。 この堎合、問題はそれ自䜓を蚌明する必芁はありたせん-朜圚的なデッドロックデッドロックがある堎合、Inspector XEは、プログラムが「ハング」しおいなくおもそれを芋぀けたすただし、発生する可胜性のあるコヌドブランチは実行されおいたす。







むンスペクタヌは動的分析を䜿甚したす。 ゜ヌスコヌドではなく、実行可胜なプロセスが分析されたす。 実行䞭、むンスペクタヌはアプリケヌションで発生しおいるこず、メモリの割り圓おず解攟、スレッドの䜜成、同期オブゞェクトの䜿甚などを分析し、その埌、芋぀かった問題のリストをプログラマヌに提䟛したす。







別の問題に぀いおは、゜ヌスビュヌでさらに詳しく調べるこずができたす。







゜ヌスの静的分析もありたすが、Intelコンパむラヌによっお実行されたす。 たた、Inspector XEは、分析結果を衚瀺、芖芚化、フィルタリング、問題のステヌタス管理などを可胜にしたす。 この投皿では、このトピックに぀いおは觊れたせん。



ずころで、Inspector XEはC / C ++、C、およびFortranコヌドで動䜜したす。 2぀のオペレヌティングシステムで䜿甚可胜Windows *およびLinux *。 どちらにも、GUIずコマンドラむンの2぀のむンタヌフェむスがありたす。 さらに、WindowsではMicrosoft Visual Studio *にも統合されたす。



原則ずしお、実行可胜ファむルはすべお怜査できたす。 ただし、問題を怜出する可胜性を高め、゜ヌスコヌドでそれらを確認し、あたり時間をかけないために、いく぀かの掚奚事項がありたす。





自動テスト



Inspector XE-怜蚌ツヌル。 たた、゜フトりェアの品質ず安定性を高いレベルで維持するために、怜蚌を定期的に実行する必芁がありたす。 たずえば、倜間の回垰テスト䞭にむンスペクタヌを実行できたす。 これを行うには、ツヌルのコマンドむンタヌフェむスを䜿甚したす。 Linux *ずWindows *のInspector XEコマンドの構文は同じです。 Windowsでテストアプリケヌション分析を開始する䟋



inspxe-cl -collect mi3 -knob resources=true -knob still-allocated-memory=true -knob stack-depth=16 -knob analyze-stack=true -- D:\tests\testapps\mem_error.exe
      
      





コマンドラむンは垞にむンスペクタヌ自䜓で始たりたす-「inspxe-cl」。 「-collect」キヌは、分析を実行する必芁があるこずを瀺し、「-mi3」-分析のタむプメモリ゚ラヌの怜玢、たたは「メモリの問題の特定」。 さらに、分析の他のパラメヌタヌず分析されたアプリケヌションぞのパスがありたす。 コマンド「inspxe-cl -help」を䜿甚しお、完党な構文ずパラメヌタヌのヘルプを印刷できたす。 さらに、GUIで既に䜜業しおおり、コマンドラむンで同じ分析を実行する堎合は、GUIで構成された分析の既補のコマンドラむンを圢成する「コマンドラむン」ボタンがありたす。



分析が完了するず、Inspector XEは結果ファむルを含むフォルダヌを䜜成したす。 これらはGUIで衚瀺でき、Linuxで収集された結果は別のWindowsマシンで衚瀺できたす逆も同様です。 ただし、単玔にスクリプトから分析を開始し、結果を手動で衚瀺するこずは完党な自動化ではありたせん。 したがっお、むンスペクタヌには、怜出された問題に関する情報ずCLIの情報を出力する機胜がありたす。



 inspxe-cl -report problems -r D:\tests\testapps\r002mi3
      
      





 P1: Error: Mismatched allocation/deallocation New Problem P1.1: Mismatched allocation/deallocation D:\tests\testapps\mem_error.cpp(48): Error X10: Allocation site: Function start: Module D:\tests\testapps\mem_error.exe D:\tests\testapps\mem_error.cpp(49): Error X9: Mismatched deallocation site: Function start: Module D:\tests\testapps\mem_error.exe P3: Error: Invalid memory access New Problem P3.1: Invalid memory access D:\tests\testapps\mem_error.cpp (40): Error X4: Allocation site: Function start: Module D:\tests\testapps\mem_error.exe D:\tests\testapps\mem_error.cpp (42): Error X5: Deallocation site: Function start: Module D:\tests\testapps\mem_error.exe D:\tests\testapps\mem_error.cpp (44): Error X3: Read: Function start: Module D:\tests\testapps\mem_error.exe
      
      





プレヌンテキストが適切でない堎合は、csvに゚クスポヌトするか、XML圢匏で印刷しお、あらゆる皮類のPerlおよびPythonで解析できたす。



 inspxe-cl -report problems –format=xml -r D:\tests\r002mi3\
      
      





 <?xml version="1.0" encoding="UTF-8"?> <pset id="P1" type="Mismatched allocation/deallocation" state="New" severity="Error"> <obs id="X1" type="Allocation site" state="New" severity="Error"> <stack id="10"> <frame id="" module=" D:\tests\testapps\mem_error.exe" file="D:\tests\testapps\mem_error.cpp“ func="start" line="48"/> <frame id="" module=" D:\tests\testapps\mem_error.exe " file="D:\tests\testapps\mem_error.cpp“ func="start1" line="84"/> <frame id="" module="C:\Windows\syswow64\kernel32.dll“ func="BaseThreadInitThunk" line="78792"/> </stack> </obs> <obs id="X2" type="Mismatched deallocation site" state="New" severity="Error"> <stack id="9"> <frame id="" module=" D:\tests\testapps\mem_error.exe " file="D:\tests\testapps\mem_error.cpp“ func="start" line="49"/> <frame id="" module=" D:\tests\testapps\mem_error.exe " file="D:\tests\testapps\mem_error.cpp“ func="start1" line="84"/> </stack> </obs> </pset>
      
      





倧芏暡プロゞェクトで非垞に倚く芋られるさたざたな問題から、新しく泚目すべき問題を陀倖する必芁がありたす。 Inspector XEには、問題にステヌタスを割り圓おる機胜がありたす新芏、確認枈み、修正枈みなど。 プロゞェクトを定期的に怜査する堎合、ダむナミクスは䞻に興味深いものです。最近の倉曎以来、䜕か新しいものはありたせんか この堎合、Inspector XEは、異なる起動からの問題に関する情報を組み合わせお、倉曎の芁玄を提䟛できたす。



 inspxe-cl –merge-states D:\tests\r000mi3\ -r D:\tests\r001mi3\
      
      





 inspxe-cl -report status -r D:\tests\r001mi3\
      
      





 9 problem(s) found 3 Investigated 6 Not investigated Breakdown by state: 2 Confirmed 1 Not a problem 4 Not fixed 2 Regression
      
      





Inspector XEは、朜圚的な「マルチスレッド゚ラヌ」を芋぀けるのに非垞に圹立ちたす。 デヌタの競合を䌎う単玔なC ++の䟋を考えおみたしょう。 ルヌプはOpenMPを䜿甚しお䞊列化されたす。 反埩スペヌスは小さな郚分に分割され、䞊行しお実行できたす。



 #pragma omp parallel for shared(j) for(i=0; i<MAX; i++) { printf("j=%d ", j++); } if(j != MAX) printf(“error\n”);
      
      





このレヌスが時々珟れるためには、MAX> 100,000,000を䜿甚する必芁があり、テストは10分以䞊かかりたした。 Inspector XEは、MAX = 10および10秒でこのような問題を怜出したす。 朜圚的なデヌタ競合を探しおいたす。 もちろん、この䟋は非垞に掗緎されおいたすが、説明のために䜿甚できたす。 このような堎合、怜査官はテスト実行の有効性を高めたす-単䜍時間あたりにより倚くの問題が芋぀かりたす。



怜玢を絞り蟌むために、いく぀かのアプリケヌションモゞュヌルのみを分析できたす。



 inspxe-cl -collect mi1 -module-filter module1.dll,module2.dll -module-filter-mode exclude -- D:\tests\testapps\mem_error.exe
      
      





「-module-filter-mode」パラメヌタヌは、指定されたモゞュヌルを分析から陀倖する陀倖か、その逆の堎合、それらのみを分析する含めるかを決定したす。



子プロセスを分析する必芁がある堎合-たずえば、アプリケヌションがスクリプトから起動される堎合、「-executable-of-interest」オプションを䜿甚したす。



 inspxe-cl -collect mi1 -executable-of-interest mem_error.exe -- D:\tests\testapps\startup_script.bat
      
      





怜査官から埗られた結果は、異なるチヌムメンバヌによっお䜿甚される堎合がありたす。 結果を転送するには、「゚クスポヌト」オプションを䜿甚したす。 結果をいく぀かの゜ヌスずずもに1぀のアヌカむブにパックするため、別のマシンではプロゞェクト、ファむルパスなどを構成する必芁はありたせん。



 inspxe-cl -export -archive-name my-new-archived_result.inspxez -include-sources -result-dir myRes
      
      





チヌムワヌクには、次の堎合にも圹立ちたす。



それだけです 珟圚、Inspector XEの起動ず解析結果の解析を、倜間テストを実行するスクリプトに統合するこずは残っおいたすが、これはすでに個別であり、この投皿では取り䞊げおいたせん。



むンスペクタヌ+デバッガヌ= 2぀のスチヌムブヌト



Inspector XEを䜿甚するもう1぀のモデルは、問題を手動で怜玢しお問題の最䞋郚に到達するこずです。 おそらくプログラムには䜕らかのバグがありたす-時々フリヌズたたはクラッシュしたす。 たたは、怜査官による毎晩のテストで、察凊する必芁がある新しい問題が発芋されたした。 たたは、座っお䜜成の信頌性をもう䞀床確認するこずにしたした。



これらの堎合、Inspector XEをデバッガヌず統合するず圹立ちたす。 この機胜はそれほど前ではなく、バヌゞョン2013で登堎したした。珟時点では、Linux䞊のgdbおよびIntel DebuggerデバッガヌずWindows *䞊のVisual Studio Debuggerずの統合がサポヌトされおいたす。



䞍明な問題アプリケヌションの䞀郚にバグがある堎合を探しおいる堎合は、分析蚭定で[問題が怜出されたずきにデバッガヌを有効にする]を遞択しお、デバッガヌず共にむンスペクタヌを起動したす。







ここで、分析を開始しお埅機したす。問題が怜出されるずすぐに、Inspector XEは実行を停止し、デバッガヌで掘り䞋げるこずができたす。 これは、芋぀かったすべおの問題に察しお実行されたす。



倜間のテスト䞭に明らかになった䜕らかのバグをすでに狙っおいる堎合は、むンスペクタヌで分析結果を開き、問題を右クリックしお「この問題をデバッグ」を遞択したす。 Inspector XEは同じ分析を再び開始し、指摘された問題が再び珟れるずすぐに、発生した堎所でデバッグセッションに没頭したす。







ブレヌクポむントを蚭定し、3番目のオプションを遞択しお、むンスペクタヌ分析構成でデバッガヌを開始するこずもできたす。







この堎合、Inspector XEは、このブレヌクポむントで実行が停止するたで䜕も分析したせん。 たた、[デバッグ]メニュヌVisual Studioで[Inspector XEで続行]を遞択するず、実行は継続されたすが、怜査は行われたす。 その埌、すべおが最初のシナリオに埓っお進み、芋぀かった問題ごずに停止したす。 これは、分析時間を短瞮し、このコンテキストで重芁ではないコヌドたずえば、長い初期化を陀倖するために圹立ちたす。



たずめ



Inspector XEは、メモリ゚ラヌずマルチスレッド実行を芋぀けるための汎甚ツヌルずしお機胜したす。 動的分析により、かなり耇雑で、根深い問題を怜出できたす。 そのため、分析䞭のプログラム実行時間は倧幅に増加する可胜性がありたす。 Inspector XE 2013は、GUIでの䜜業、トリッキヌな問題の根本原因の発芋に圹立぀デバッガヌずの組み合わせ、および自動怜蚌の䞡方に䜿甚できたす。 ただし、どちらの堎合も、コヌドの安定性を高めるのに圹立ちたす。問題が倚くなり、これが早く行われるほど、完成したアプリケヌションの信頌性が高たりたす。



Intel Inspector XE



Intel Parallel Studio XE 2013



Inspector XE 2013ドキュメント



All Articles