Files
2025-10-14 09:52:32 +09:00

662 lines
17 KiB
Plaintext

; --------------------------------------------------------------------------------
; @Title: Menu File for TRACE32 QNX Awareness
; @Description: -
; @Keywords: QNX menu awareness
; @Author: DIE
; @Copyright: (c) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: qnx.m 9317 2023-08-02 14:44:51Z rdienstbeck $
NAME "TASK.QNX"
IF !MENU.EXIST("TASK.QNX")
(
add
menu
(
popup "QNX"
(
default
menuitem "Display &Processes" "TASK.Process"
menuitem "Display &Threads" "TASK.Thread"
popup "Display pidin-like"
(
menuitem "plain" "TASK.PIDIN"
menuitem "flags" "TASK.PIDIN FLags"
menuitem "family" "TASK.PIDIN FAm"
menuitem "procmem" "TASK.PIDIN PMEM"
menuitem "memory" "TASK.PIDIN MEM"
)
menuitem "Display &ASInfo" "TASK.ASINFO"
popup "Display File System"
(
menuitem "Display IFS directory" "TASK.IFS"
menuitem "Display shmem contents..."
(
dialog
(
header "TASK.SHMEM"
pos 0. 0. 24. 3.
box "shmem file path"
pos 1. 1. 22. 1.
shmem: defedit "" ""
pos 2. 3. 7. 1.
defbutton "Ok"
(
PRIVATE &shmem
&shmem=dialog.string(shmem)
TASK.SHMEM "&shmem"
dialog.end
)
pos 15. 3. 7. 1.
button "Cancel" "dialog.end"
)
)
menuitem "Display slogger2 contents..."
(
dialog
(
header "TASK.SLOGGER2"
pos 0. 0. 24. 3.
box "slogger2 buffer name"
pos 1. 1. 22. 1.
slogger2: defedit "" ""
pos 2. 3. 7. 1.
defbutton "Ok"
(
PRIVATE &slogger2
&slogger2=dialog.string(slogger2)
TASK.SLOGGER2 "&slogger2"
dialog.end
)
pos 15. 3. 7. 1.
button "Cancel" "dialog.end"
)
)
)
separator
popup "&Process Debugging"
(
menuitem "[:symbols]&Load Symbols..."
(
dialog
(
header "TASK.sYmbol.LOAD"
pos 0. 0. 30. 3.
box "Process name"
pos 1. 1. 20. 1.
procl: defedit "" ""
pos 6. 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. 30. 3.
box "Process name"
pos 1. 1. 20. 1.
procd: defedit "" ""
pos 6. 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 &sPath &sOptionMachineName
IF (PRACTICE.FUNCtion.AVAILable(SYStem.Option.MACHINESPACES))
(
IF (SYStem.Option.MACHINESPACES()&&(""!=""))
(
SPRINTF &sOptionMachineName "/MACHINE %s" STRing.SPLIT("",".",0.)
)
)
&sPath=OS.FILE.JOINPATH(TASK.GETDIR(),"app_debug.cmm")
IF OS.FILE("&sPath")
(
DO "&sPath" /DIALOG &sOptionMachineName
ENDDO
)
PRINT %ERROR "File ""app_debug.cmm"" not found. Please contact support@lauterbach.com ."
)
addhere
popup "&Watch Processes"
(
menuitem "[:plus]&Add..."
(
dialog
(
header "Add Process to Watch"
pos 0. 0. 24. 3.
box "Process name"
pos 1. 1. 22. 1.
wproca: defedit "" ""
pos 2. 3. 7. 1.
defbutton "Ok"
(
PRIVATE &wproca
&wproca=dialog.string(wproca)
TASK.Watch.View "&wproca"
dialog.end
)
pos 15. 3. 7. 1.
button "Cancel" "dialog.end"
)
)
menuitem "[:remove]&Remove..."
(
dialog
(
header "Delete Process from Watch"
pos 0. 0. 24. 3.
box "Process name"
pos 1. 1. 22. 1.
wprocd: defedit "" ""
pos 2. 3. 7. 1.
defbutton "Ok"
(
PRIVATE &wprocd
&wprocd=dialog.string(wprocd)
TASK.Watch.DELete "&wprocd"
dialog.end
)
pos 15. 3. 7. 1.
button "Cancel" "dialog.end"
)
)
)
separator
menuitem "[:mmu]Scan Process MMU Pages..."
(
dialog
(
header "MMU.TaskPageTable.SCAN"
pos 0. 0. 24. 3.
box "Process name"
pos 1. 1. 22. 1.
wproca: defedit "" ""
pos 2. 3. 7. 1.
defbutton "Ok"
(
PRIVATE &wproca
&wproca=dialog.string(wproca)
MMU.TaskPageTable.SCAN "&wproca"
dialog.end
)
pos 15. 3. 7. 1.
button "Cancel" "dialog.end"
)
)
menuitem "[:mmu]Scan All MMU Tables" "MMU.SCANALL"
separator
menuitem "[:manual]Help Process Debugging" "HELP __RTOS_QNX_.LINK.User_Processes"
)
popup "&Library Debugging"
(
menuitem "[:symbols]&Load Symbols..."
(
dialog
(
header "TASK.sYmbol.LOADLib"
pos 0. 0. 22. 3.
box "Process name"
pos 1. 1. 20. 1.
libpl: defedit "" ""
pos 0. 3. 22. 3.
box "Library name"
pos 1. 4. 20. 1.
libll: defedit "" ""
pos 6. 6. 7. 1.
defbutton "Ok"
(
PRIVATE &libpl &libll
&libpl=dialog.string(libpl)
&libll=dialog.string(libll)
TASK.sYmbol.LOADLib "&libpl" "&libll"
dialog.end
)
pos 17. 6. 7. 1.
button "Cancel" "dialog.end"
)
)
menuitem "[:symbols]&Delete Symbols..."
(
dialog
(
header "TASK.sYmbol.DELeteLib"
pos 0. 0. 22. 3.
box "Process name"
pos 1. 1. 20. 1.
libpd: defedit "" ""
pos 0. 3. 22. 3.
box "Library name"
pos 1. 4. 20. 1.
libld: defedit "" ""
pos 6. 6. 7. 1.
defbutton "Ok"
(
PRIVATE &libpd &libld
&libpd=dialog.string(libpd)
&libld=dialog.string(libld)
TASK.sYmbol.DELeteLib "&libpd" "&libld"
dialog.end
)
pos 17. 6. 7. 1.
button "Cancel" "dialog.end"
)
)
separator
menuitem "Scan Process MMU Pages..."
(
dialog
(
header "MMU.TaskPageTable.SCAN"
pos 0. 0. 24. 3.
box "Process name"
pos 1. 1. 22. 1.
wproca: defedit "" ""
pos 2. 3. 7. 1.
defbutton "Ok"
(
PRIVATE &wproca
&wproca=dialog.string(wproca)
MMU.TaskPageTable.SCAN "&wproca"
dialog.end
)
pos 15. 3. 7. 1.
button "Cancel" "dialog.end"
)
)
menuitem "Scan All MMU Tables" "MMU.SCANALL"
)
separator
popup "S&ymbol Autoloader"
(
menuitem "[:symbols]List Components" "sYmbol.AutoLoad.List"
menuitem "[:init]Check Now!" "sYmbol.AutoLoad.CHECK"
menuitem "[:config]Config..." "sYmbol.AutoLOAD.config"
menuitem "[:objects]Components..."
(
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
dialog.set clib "FALSE"
)
clib: checkbox "CurrLib (Libraries of Current Process)"
(
if dialog.boolean(clib)
TASK.sYmbol.Option AutoLoad CurrLib
else
TASK.sYmbol.Option AutoLoad NoLibrary
dialog.set lib "FALSE"
)
)
dialog.set proc ((TASK.y.o(autoload)&0x1)!=0)
dialog.set lib ((TASK.y.o(autoload)&0x2)!=0)
dialog.set clib ((TASK.y.o(autoload)&0x8)!=0)
)
)
IF PRACTICE.FUNCtion.AVAILable(SYStem.Option.MACHINESPACES)
(
IF !SYStem.Option.MACHINESPACES()
(
MENUITEM "[ X X X X X,XXXXXXXXXXXX, XxxxxxxxxXs,XXxxxxxxxxXs, XxxxxxxxxXX,XXxxxxxxxxXs, XxxxxxxxxXX,XXxxxxSSSSSSSS, XxxxxSBBwwwwwS,XXxxxxSBBwwwXwBS, XXXXXSBBwwwwwBB, XsXsXSBBBBBBBBB, SBBWWWWWBB, SBBWWWWWBB, SBBWRRRWBB, BBWWWWWBB]Generate RAM Dump"
(
PRIVATE &sPath
&sPath=OS.FILE.JOINPATH(TASK.GETDIR(),"ramdump.cmm")
IF OS.FILE("&sPath")
(
DO "&sPath" /DIALOG
ENDDO
)
PRINT %ERROR "File ""ramdump.cmm"" not found. Please contact support@lauterbach.com ."
)
)
)
ELSE
(
MENUITEM "[ X X X X X,XXXXXXXXXXXX, XxxxxxxxxXs,XXxxxxxxxxXs, XxxxxxxxxXX,XXxxxxxxxxXs, XxxxxxxxxXX,XXxxxxSSSSSSSS, XxxxxSBBwwwwwS,XXxxxxSBBwwwXwBS, XXXXXSBBwwwwwBB, XsXsXSBBBBBBBBB, SBBWWWWWBB, SBBWWWWWBB, SBBWRRRWBB, BBWWWWWBB]Generate RAM Dump"
(
PRIVATE &sPath
&sPath=OS.FILE.JOINPATH(TASK.GETDIR(),"ramdump.cmm")
IF OS.FILE("&sPath")
(
DO "&sPath" /DIALOG
ENDDO
)
PRINT %ERROR "File ""ramdump.cmm"" not found. Please contact support@lauterbach.com ."
)
)
separator
popup "&Stack Coverage"
(
menuitem "&List Stacks"
(
if icd()
TASK.STacK.PATtern 0
TASK.STacK
)
menuitem "Add Task" "TASK.STacK.ADD"
menuitem "Remove Task" "TASK.STacK.ReMove"
menuitem "Reset Coverage"
(
PRIVATE &yes
DIALOG.YESNO "Overwrite unused stack space" "with stack fill pattern?"
ENTRY &yes
IF !&yes
ENDDO
TASK.STacK.Init
)
)
)
popup "Trace"
(
popup "List"
(
separator
menuitem "&Task Switches" "Trace.List List.TASK"
menuitem "&Default and Tasks" "Trace.List List.TASK DEFault"
)
)
popup "Perf"
(
separator
popup "&Task Runtime"
(
menuitem "&Prepare"
(
if t.method.analyzer()
(
Analyzer.AutoInit on
)
if a.mode.flow()
(
Break.Delete /TraceEnable
Break.Set 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 a.mode.flow()
(
Break.Delete /TraceData
Break.Set 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 "Task &Status"
(
menuitem "&Prepare"
(
if t.method.analyzer()
(
Analyzer.AutoInit on
)
)
menuitem "[:perf]Show &Numerical" "Trace.STATistic.TASKSTATE"
menuitem "[:achart]Show as &Timing" "Trace.CHART.TASKSTATE"
menuitem "[:achart]Tracking with Trace &List"
(
Trace.List List.TASK DEFault /Track
Trace.CHART.TASKSTATE /Track
)
)
)
popup "&Help"
(
MENUITEM "[:manual]OS Awareness Manual QNX" "HELP __RTOS_QNX_"
)
)
menu "task.p"
(
default
menuitem "Display detailed"
(
PRIVATE &address
&address=address.offset(track.address())
TASK.Process &address
)
menuitem "Display Process struct"
(
PRIVATE &address
&address=track.address()
Var.View %Open %String (struct process_entry*)(&address)
)
separator
menuitem "Load Process Symbols" "TASK.sYmbol.LOAD track.address()"
menuitem "Delete Process Symbols" "TASK.sYmbol.DELete track.address()"
menuitem "Add to Watched Processes"
(
PRIVATE &address
&address=address.offset(track.address())
TASK.Watch.View &address
)
menuitem "Delete from Watched Processes" "TASK.Watch.DELete track.address()"
separator
menuitem "Scan MMU Pages"
(
PRIVATE &address
&address=address.offset(track.address())
&address=TASK.proc.threads(&address,0)
MMU.TaskPageTable.SCAN &address
)
menuitem "Dump process entry"
(
PRIVATE &address
&address=track.address()
Data.dump &address /l /dialog
)
)
menu "task.t"
(
default
menuitem "Display Detailed"
(
PRIVATE &thread
&thread=address.offset(track.address())
TASK.Thread &thread
)
IF TASK.MUON.AVAIL()!=0
(
menuitem "Display Thread struct"
(
PRIVATE &address
&address=address.offset(track.address())
&access=address.straccess(track.address())
&address=TASK.MUON.THREAD(&address)
Var.View %Open %String (struct thread_entry*)(&(access)&(address))
)
menuitem "Display Muon Thread struct"
(
PRIVATE &address
&address=track.address()
Var.View %Open %String (muon_thread_t*)(&address)
)
)
ELSE
(
menuitem "Display Thread struct"
(
PRIVATE &address
&address=track.address()
Var.View %Open %String (struct thread_entry*)(&address)
)
)
separator
menuitem "Display Stack Frame"
(
PRIVATE &thread
&thread=address.offset(track.address())
Var.Frame /Locals /Caller /TASK &thread
)
menuitem "Switch Context"
(
PRIVATE &thread
&thread=address.offset(track.address())
Register.TASK &thread
)
separator
menuitem "Add to Stack Cov"
(
PRIVATE &thread
&thread=address.offset(track.address())
TASK.STacK.ADD &thread
)
menuitem "Rm from Stack Cov"
(
PRIVATE &thread
&thread=address.offset(track.address())
TASK.STacK.ReMove &thread
)
separator
menuitem "Dump thread entry"
(
PRIVATE &address
&address=track.address()
Data.dump &address /DIALOG
)
)
menu "task.lib"
(
default
;menuitem "Display detailed"
;(
; &address=address.offset(track.address())
; TASK.LIBrary &address
;)
menuitem "Display Library struct"
(
PRIVATE &address
&address=address.offset(track.address())
Var.View %m %s (struct link_map*)&address
)
separator
menuitem "Load Library Symbols" "TASK.sYmbol.LOADLib track.string() track.address()"
menuitem "Delete Library Symbols" "TASK.sYmbol.DELeteLib track.string() track.address()"
separator
menuitem "Dump Library entry"
(
PRIVATE &address
&address=address.offset(track.address())
Data.dump &address /l /dialog
)
)
menu "task.w"
(
default
menuitem "Display Process"
(
PRIVATE &address
&address=address.offset(track.address())
TASK.Process &address
)
menuitem "Delete from List"
(
PRIVATE &name
&name=track.string()
TASK.Watch.DELete "&name"
)
)
buttons "y.aload.l"
(
width wider
menuitem "[:objects]Components..."
(
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
dialog.set clib "FALSE"
)
clib: checkbox "CurrLib (Libraries of Current Process)"
(
if dialog.boolean(clib)
TASK.sYmbol.Option AutoLoad CurrLib
else
TASK.sYmbol.Option AutoLoad NoLibrary
dialog.set lib "FALSE"
)
)
dialog.set proc ((TASK.y.o(autoload)&0x1)!=0)
dialog.set lib ((TASK.y.o(autoload)&0x2)!=0)
dialog.set clib ((TASK.y.o(autoload)&0x8)!=0)
)
)
)