; -------------------------------------------------------------------------------- ; @Title: Windows Std specific menu ; @Description: - ; @Author: DIE ; @Copyright: (c) 1989-2021 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Id: windows.mh 7861 2022-07-29 13:45:42Z amerkle $ NAME "TASK.WINDOWS" IF !MENU.EXIST("TASK.WINDOWS") ( add menu ( POPUP "Windows" ( default menuitem "[:objects]Display &Processes" "TASK.Process" menuitem "[:objects]Display &Threads" "TASK.Thread" menuitem "[:objects]Display &Modules" "TASK.MODule" separator popup "&Process Debugging" ( menuitem "[:symbols]&Load Symbols..." ( dialog ( header "TASK.sYmbol.LOAD" pos 0. 0. 26. 3. box "Process name" pos 1. 1. 16. 1. procl: defedit "" "" pos 18. 1. 7. 1. button "Browse..." ( PRIVATE &file dialog.file "*.exe" entry %line &file dialog.set procl "&file" ) pos 2. 3. 7. 1. defbutton "Ok" ( PRIVATE &procl &procl=dialog.string(procl) TASK.sYmbol.LOAD "&procl" dialog.end ) pos 17. 3. 7. 1. button "Cancel" "dialog.end" ) ) menuitem "[:symbols]&Delete Symbols..." ( dialog ( header "TASK.sYmbol.DELete" pos 0. 0. 26. 3. box "Process name" pos 1. 1. 16. 1. procd: defedit "" "" pos 18. 1. 7. 1. button "Browse..." ( PRIVATE &file dialog.file "*.exe" entry %line &file dialog.set procd "&file" ) pos 2. 3. 7. 1. defbutton "Ok" ( PRIVATE &procd &procd=dialog.string(procd) TASK.sYmbol.DELete "&procd" dialog.end ) pos 17. 3. 7. 1. button "Cancel" "dialog.end" ) ) menuitem "Debug New Process..." ( PRIVATE &sExtDir &sOptionMachine &sExtDir=TASK.GETDIR() IF PRACTICE.FUNCtion.AVAILable(SYStem.Option.MACHINESPACES) ( IF SYStem.Option.MACHINESPACES() ( &sOptionMachine=STRing.CUT("/MACHINE ",-1.) ) ) DO "&sExtDir/app_debug" /DIALOG &sOptionMachine ) ;separator ;menuitem "Help Process Debugging" "HELP __RTOS_WINSTD_User_Processes" ) popup "D&LL Debugging" ( menuitem "[:symbols]&Load Symbols..." ( dialog ( header "TASK.sYmbol.LOADDLL" pos 0. 0. 26. 3. box "DLL name" pos 1. 1. 16. 1. dlll: defedit "" "" pos 18. 1. 7. 1. button "Browse..." ( PRIVATE &file dialog.file "*.dll" entry %line &file dialog.set dlll "&file" ) pos 2. 3. 7. 1. defbutton "Ok" ( PRIVATE &dlll &dlll=dialog.string(dlll) TASK.sYmbol.LOADDLL "&dlll" dialog.end ) pos 17. 3. 7. 1. button "Cancel" "dialog.end" ) ) menuitem "[:symbols]&Delete Symbols..." ( dialog ( header "TASK.sYmbol.DELeteDLL" pos 0. 0. 26. 3. box "DLL name" pos 1. 1. 16. 1. dlld: defedit "" "" pos 18. 1. 7. 1. button "Browse..." ( PRIVATE &file dialog.file "*.dll" entry %line &file dialog.set dlld "&file" ) pos 2. 3. 7. 1. defbutton "Ok" ( PRIVATE &dlld &dlld=dialog.string(dlld) TASK.sYmbol.DELeteDLL "&dlld" dialog.end ) pos 17. 3. 7. 1. button "Cancel" "dialog.end" ) ) ) popup "&Module Debugging" ( menuitem "[:symbols]&Load Symbols..." ( dialog ( header "TASK.sYmbol.LOADKM" pos 0. 0. 26. 3. box "Module name" pos 1. 1. 16. 1. kmodl: defedit "" "" pos 18. 1. 7. 1. button "Browse..." ( PRIVATE &file dialog.file "*.sys" entry %line &file dialog.set kmodl "&file" ) pos 2. 3. 7. 1. defbutton "Ok" ( PRIVATE &kmodl &kmodl=dialog.string(kmodl) TASK.sYmbol.LOADKM "&kmodl" dialog.end ) pos 17. 3. 7. 1. button "Cancel" "dialog.end" ) ) menuitem "[:symbols]&Delete Symbols..." ( dialog ( header "TASK.sYmbol.DELeteKM" pos 0. 0. 26. 3. box "Module name" pos 1. 1. 16. 1. kmodd: defedit "" "" pos 18. 1. 7. 1. button "Browse..." ( PRIVATE &file dialog.file "*.sys" entry %line &file dialog.set kmodd "&file" ) pos 2. 3. 7. 1. defbutton "Ok" ( PRIVATE &kmodd &kmodd=dialog.string(kmodd) TASK.sYmbol.DELeteKM "&kmodd" dialog.end ) pos 17. 3. 7. 1. button "Cancel" "dialog.end" ) ) menuitem "Debug Module on entry..." ( PRIVATE &sExtDir &sOptionMachine &sExtDir=TASK.GETDIR() IF PRACTICE.FUNCtion.AVAILable(SYStem.Option.MACHINESPACES) ( IF SYStem.Option.MACHINESPACES() ( &sOptionMachine=STRing.CUT("/MACHINE ",-1.) ) ) DO "&(sExtDir)/mod_debug" /DIALOG &sOptionMachine ) ;separator ;menuitem "Help Process Debugging" "HELP __RTOS_WINSTD_User_Processes" ) separator menuitem "[:dump]Generate RAM Dump" ( PRIVATE &sExtDir &sExtDir=TASK.GETDIR() DO "&(sExtDir)/ramdump.cmm" ) separator popup "[:symbols]&Autoloader" ( menuitem "[:symbols]List Components" "sYmbol.AutoLoad.List" menuitem "[:init]Check Now!" "sYmbol.AutoLoad.CHECK" menuitem "Set Loader Script" ( dialog ( header "sYmbol.AutoLoad.CHECKWINCE" pos 0. 0. 40. 3. box "autoload batch script" pos 1. 1. 30. 1 cmmfile: edit "autoload.cmm" "" pos 32. 1. 7. 1. button "Browse..." ( PRIVATE &file dialog.file "*.cmm" entry %line &file dialog.set cmmfile "&file" ) pos 1. 3. 16. 1. checkon: checkbox "automatic check" "" pos 10. 4.5 8. defbutton "Ok" ( PRIVATE &cmm &cmm=dialog.string(cmmfile) sYmbol.AutoLoad.CHECKWINCE "do &cmm " sYmbol.AutoLoad.CHECK ; trigger check manually if dialog.boolean(checkon) sYmbol.AutoLoad.CHECK ON ; automatic check enabled else sYmbol.AutoLoad.CHECK OFF ; automatic check disabled dialog.end ) pos 22. 4.5 8. button "Cancel" "dialog.end" ) ) menuitem "Set Components Checked" ( dialog ( header "TASK.sYmbol.Option AutoLoad" pos 0. 0. 25. proc: checkbox "Process (Processes)" ( if dialog.boolean(proc) TASK.sYmbol.Option AutoLoad Process else TASK.sYmbol.Option AutoLoad NoProcess ) lib: checkbox "Library (All Libraries)" ( if dialog.boolean(lib) TASK.sYmbol.Option AutoLoad Library else TASK.sYmbol.Option AutoLoad NoLibrary ) mod: checkbox "Module (Kernel modules)" ( if dialog.boolean(mod) TASK.sYmbol.Option AutoLoad KModule else TASK.sYmbol.Option AutoLoad NoKModule ) ) dialog.set mod ((task.y.o(autoload)&0x1)!=0) dialog.set proc ((task.y.o(autoload)&0x2)!=0) dialog.set lib ((task.y.o(autoload)&0x4)!=0) ) menuitem "[:config]Set Preferences" ( dialog ( header "Autoloader Preferences" POS 0. 0. 42. 1. LINE "Download the debug symbols from Microsoft symbol server?" POS 2. 1. 10. 1. Download.1: CHOOSEBOX "Always" "" Download.2: CHOOSEBOX "Never" "" Download.3: CHOOSEBOX "Ask the user" "" POS 0. 4. 42. 1. LINE "Failing to locate the debug symbols?" POS 2. 5. 42. 1. notfound.1: CHOOSEBOX "Ignore" "" notfound.2: CHOOSEBOX "Ask the user" "" POS 10. 7. 10. 1. DEFBUTTON "OK" "CONTinue" POS 21. 7. 10. 1. BUTTON "Cancel" "GOTO cancel" CLOSE "GOTO cancel" ) setdefault: PRIVATE &sExtDir &sExtDir=TASK.GETDIR() ( PRIVATE &def1 &def2 DO "&(sExtDir)/preferences" get ENTRY &def1 &def2 IF ("&def1"=="yes") ( DIALOG.Set Download.1 ) ELSE IF ("&def1"=="no") ( DIALOG.Set Download.2 ) ELSE IF ("&def1"=="ask") ( DIALOG.Set Download.3 ) IF ("&def2"=="ignore") ( DIALOG.Set notfound.1 ) ELSE IF ("&def2"=="ask") ( DIALOG.Set notfound.2 ) ) waitforprefok: STOP GOTO dialog_pref_ok dialog_pref_ok: IF DIALOG.BOOLEAN(Download.1) ( DO "&(sExtDir)/preferences" set symbol_download yes ) ELSE IF DIALOG.BOOLEAN(Download.2) ( DO "&(sExtDir)/preferences" set symbol_download no ) ELSE IF DIALOG.BOOLEAN(Download.3) ( DO "&(sExtDir)/preferences" set symbol_download ask ) IF DIALOG.BOOLEAN(notfound.1) ( DO "&(sExtDir)/preferences" set symbol_not_found ignore ) ELSE IF DIALOG.BOOLEAN(notfound.2) ( DO "&(sExtDir)/preferences" set symbol_not_found ask ) cancel: DIALOG.END ) ) separator popup "[:coverage]&Stack Coverage" ( menuitem "[:coverage]&List Stacks" "TASK.STacK.view" menuitem "[:plus]Add Task" "TASK.STacK.ADD" menuitem "[:remove]Remove Task" "TASK.STacK.RM" enable ice()||fire() menuitem "&Reset Coverage" "TASK.STacK.RESet" ) ) popup "Trace" ( popup "[:alist]List" ( separator menuitem "[:alist]&Task Switches" "Trace.List List.TASK" menuitem "[:alist]&Default and Tasks" "Trace.List List.TASK DEFault" ) ) popup "Perf" ( separator popup "&Task Runtime" ( menuitem "&Prepare" ( if t.method.analyzer() ( Analyzer.AutoInit on ) if (ice()||fire())&&!a.mode.flow() ( Analyzer.ReProgram ( Sample.Enable if AlphaBreak&&Write ) Break.Delete /Alpha Break.Set C:0x1F:::task.config(magic)++(task.config(magicsize)-1) /Alpha ) if a.mode.flow() ( Break.Delete /TraceEnable Break.Set C:0x1F:::task.config(magic) /TraceEnable ) ) menuitem "[:perf]Show &Numerical" "Trace.STATistic.TASK" menuitem "[:achart]Show as &Timing" "Trace.CHART.TASK" menuitem "[:achart]Tracking with Trace &List" ( Trace.List List.TASK DEFault /Track Trace.CHART.TASK /Track ) ) popup "Task &Function Runtime" ( menuitem "&Prepare" ( if t.method.analyzer() ( Analyzer.AutoInit on Analyzer.STATistic.PreFetch on ) if (ice()||fire())&&!a.mode.flow() ( if a.config.hac() ( Analyzer.ReProgram ( Sample.Enable if AlphaBreak Sample.Enable if BetaBreak Mark.A if AlphaBreak Mark.B if BetaBreak ) ) else ( Analyzer.ReProgram ( Sample.Enable if AlphaBreak||BetaBreak Mark.A if AlphaBreak Mark.B if BetaBreak ) ) Break.Delete /Alpha /Beta /Charly Break.SetFunc Break.Set C:0x1F:::task.config(magic)++(task.config(magicsize)-1) /Alpha ) if a.mode.flow() ( Break.Delete /TraceData Break.Set C:0x1F:::task.config(magic) /TraceData ) ) menuitem "[:perf]Show &Numerical" "Trace.STATistic.TASKFUNC" menuitem "[:perf]Show as &Tree" "Trace.STATistic.TASKTREE" menuitem "[:perf]Show &Detailed Tree" "Trace.STATistic.TASKTREE ALL" menuitem "[:achart]Show as &Timing" "Trace.CHART.TASKFUNC" menuitem "[:alist]Show N&esting" "Trace.List List.TASK FUNC TI.FUNC" ) ) popup "&Help" ( MENUITEM "[:manual]OS Awareness Manual Windows Std" "HELP __RTOS_WINDOWS_" ) ) menu "task.p" ( default menuitem "[:objects]Display detailed" ( PRIVATE &nAddress &nAddress=address.offset(track.address()) TASK.Process &nAddress ) menuitem "[:var]Display process struct" ( PRIVATE &nAddress &nAddress=address.offset(track.address()) Var.View %m %s (_EPROCESS)*&nAddress ) separator menuitem "[:symbols]Load process symbols" "TASK.sYmbol.LOAD track.address()" menuitem "[:symbols]Delete Process Symbols" "TASK.sYmbol.DELete track.address()" separator menuitem "[:dump]Dump process entry" ( PRIVATE &pAddress &pAddress=track.address() Data.dump &pAddress /l /dialog ) ) menu "task.t" ( default menuitem "[:objects]Display detailed" ( PRIVATE &nAddress &nAddress=address.offset(track.address()) TASK.Thread &nAddress ) menuitem "[:var]Display thread struct" ( PRIVATE &nAddress &nAddress=address.offset(track.address()) Var.View %m %s (_ETHREAD)*&nAddress ) separator menuitem "[:varframe]Display Stack Frame" ( PRIVATE &nAddress &nAddress=address.offset(track.address()) Var.Frame /Locals /Caller /Task &nAddress ) menuitem "[:reg]Display Registers" ( PRIVATE &nAddress &nAddress=address.offset(track.address()) Register /Task &nAddress ) menuitem "Switch Context" ( PRIVATE &nAddress &nAddress=address.offset(track.address()) Register.TASK &nAddress ) separator menuitem "[:plus]Add to Stack Cov" ( PRIVATE &nAddress &nAddress=address.offset(track.address()) TASK.STK.ADD &nAddress ) menuitem "[:remove]Rm from Stack Cov" ( PRIVATE &nAddress &nAddress=address.offset(track.address()) TASK.STK.RM &nAddress ) separator menuitem "[:dump]Dump thread entry" ( PRIVATE &pAddress &pAddress=track.address() Data.dump &pAddress /l /dialog ) ) menu "task.mod" ( default menuitem "[:objects]Display detailed" ( PRIVATE &nAddress &nAddress=address.offset(track.address()) TASK.MODule &nAddress ) menuitem "[:var]Display module struct" ( PRIVATE &nAddress &nAddress=address.offset(track.address()) Var.View %m %s (_LDR_DATA_TABLE_ENTRY)*&nAddress ) separator ;menuitem "Load Module Symbols" "TASK.sYmbol.LOADKM track.address()" menuitem "[:symbols]Load module symbols" ( PRIVATE &nAddress &nAddress=address.offset(track.address()) &nAddress=task.mod.base(&nAddress) sYmbol.AutoLOAD.CHECK sYmbol.AutoLOAD.TOUCH &nAddress ) menuitem "[:symbols]Delete Module Symbols" "TASK.sYmbol.DELeteKM track.address()" separator menuitem "[:dump]Dump module entry" ( PRIVATE &pAddress &pAddress=track.address() Data.dump &pAddress /l /dialog ) ) menu "task.lib" ( default ;menuitem "Display detailed" ;( ; &address=address.offset(track.address()) ; TASK.Library &address ;) menuitem "[:var]Display Library Struct" ( PRIVATE &nAddress &nSpaceId &nAddress=address.offset(track.address()) &nSpaceId=address.segment(track.address()) Var.View %m %s (_LDR_DATA_TABLE_ENTRY)*(&nSpaceId:&nAddress) ) separator menuitem "[:symbols]Load Library Symbols" ( PRIVATE &nAddress &nSpaceId &nMagic &nAddress=address.offset(track.address()) &nSpaceId=address.segment(track.address()) &nMagic=task.proc.sid2magic(&nSpaceId) TASK.sYmbol.LOADDLL &nAddress &nMagic ) menuitem "[:symbols]Delete Library Symbols" ( PRIVATE &nAddress &nSpaceId &nMagic &nAddress=address.offset(track.address()) &nSpaceId=address.segment(track.address()) &nMagic=task.proc.sid2magic(&nSpaceId) TASK.sYmbol.DELeteDLL &nAddress &nMagic ) separator menuitem "[:var]Dump Library Entry" ( PRIVATE &nAddress &nSpaceId &nAddress=address.offset(track.address()) &nSpaceId=address.segment(track.address()) Data.dump &nSpaceId:&nAddress /l /dialog ) ) )