如何在QNX中使用THREAD类型访问每个线程的堆栈?

时间:2013-09-13 14:36:10

标签: c unix operating-system qnx qnx-neutrino

QNX中微子中的THREAD数据类型是什么? 如何使用THREAD *值访问线程堆栈的内容,就像使用gdb命令工具调试堆栈帧一样?

1 个答案:

答案 0 :(得分:0)

您可以通过/ proc文件系统在另一个进程中检索您自己的特定线程的寄存器值或(如果您是root用户)。

首先使用DCMD_PROC_CURTHREAD devctl()选择要检索寄存器的线程:

http://www.qnx.com/developers/docs/6.5.0_sp1/index.jsp?topic=%2Fcom.qnx.doc.neutrino_prog%2Fprocess.html&cp=13_7_3_4_7&anchor=DCMD_PROC_CURTHREAD

之后使用DCMD_PROC_GETREG来检索寄存器的值,包括堆栈指针。

如果您是从同一进程的另一个线程执行此操作,则可以使用SP的值,因为您位于相同的地址空间中。

如果您是从另一个进程执行此操作,则需要通过/ proc / PID /读取()地址空间,如下所述: http://www.qnx.com/developers/docs/6.5.0_sp1/index.jsp?topic=%2Fcom.qnx.doc.neutrino_prog%2Fprocess.html&cp=13_7_3_4_1&anchor=Address_space