Hi,

On 10-3-16 下午8:59, Samuel Thibault wrote:
> 
> Get the address of the mach_port_deallocate_debug variable, set it to 1
> by entering kdb and use
> 
> w theaddress 1
> 
> then trigger the warning, you'll now get kdb invoked from the context.
> Then you can use trace to get the backtrace, and "show all thread/u" to
> know which process the task corresponds to. Then you can use e.g. gdb to
> know exactly which mach_port_deallocate() call is apparently spurious.
OK, now I can invoke kdb and set the variable. After the Hurd triggers the
warning, I get to kdb and invoke 'show all thread/u", but I don't know how to
find the task that trigger the warning. There are so many tasks and threads. The
output is something like this:
ID:     TASK            MAP             THD             SUS             PR      
        COMMAND                 THREADS
 0:     1fef5234        1fef3294        8               0               12      
        gnumach
         0:(...)        1:(...) ...
 1:     1fef6b24        1fef6bc4        628             0               12
        ...
...

We can see that the first task is gnumach, which has 8 threads, and it lists all
threads of gnumach at the end. But I don't know some columns such as
SUS(suspend?) and PR (priority?).
But the command doesn't always display the command of a task. For example, the
next task has 628 threads, but I don't know which process it corresponds to.

Zheng Da


Reply via email to