Submandato

El submandato lb establece un punto de interrupción local permanente en el código para un contexto específico.

Nota: Este submandato sólo está disponible en el depurador de kernel de KDB. No se incluye en el mandato kdb .

Formato

lb [-p | -v] [dirección]

Parámetros

Elemento Descripción
-p Indica que la dirección de punto de interrupción es una dirección física o real.
-v Indica que la dirección de punto de interrupción es una dirección efectiva o virtual.
dirección Especifica la dirección del punto de interrupción. Puede ser una dirección efectiva o física. Se pueden utilizar símbolos, valores hexadecimales o expresiones hexadecimales para especificar la dirección.

El contexto puede estar basado en la CPU o basado en hebras. Cualquier contexto se puede controlar mediante una opción set subcommand . Cada submandato lb asocia un contexto con el punto de interrupción local y se pueden establecer hasta ocho contextos diferentes para cada punto de interrupción local. El contexto es la dirección efectiva de la entrada de hebra actual en la tabla de hebras o el número de procesador actual.

Si el submandato lb se utiliza sin parámetros, se visualizan todos los puntos de interrupción y rastreo actuales.

Si se especifica una dirección, la ruptura se establece con el contexto de la hebra actual o de la CPU. Para establecer una interrupción utilizando un contexto que no sea la hebra o CPU actual, cambie el contexto actual utilizando el submandato sw y el submandato cpu.

Si se alcanza un punto de interrupción local con un contexto que no se ha especificado, se visualiza un mensaje, pero no se produce una interrupción.

De forma predeterminada, el depurador de kernel KDB elige el estado actual de la máquina. Si el submandato se especifica antes de la inicialización de VMM, la dirección es la dirección física o la dirección real. Si el submandato se especifica después de la inicialización de VMM, la dirección es la dirección efectiva o virtual. Después de configurar VMM, se debe utilizar el parámetro -p para establecer un punto de interrupción en modalidad real para el código que no está correlacionado V=R. De lo contrario, el depurador del kernel KDB espera una dirección virtual y traduce la dirección.

Otro

lbrk

Ejemplos

A continuación se muestra un ejemplo de cómo utilizar el submandato lb :

   KDB(0)> b execv  //set break point on execv()
   Assumed to be [External data]: 001F4200 execve
   Ambiguous: [Ext func]
   001F4200 .execve
   .execve+000000 (sid:00000000) permanent & global
   KDB(0)> e  //exit debugger
   ...
   Breakpoint
   .execve+000000    mflr    r0                  <.svc_flih+00011C>
   KDB(0)> ppda  //print current processor data area

   Per Processor Data Area [00086E40]

   csa......................2FEE0000  mstack...................0037CDB0
   fpowner..................00000000  curthread................E60008C0
   ...
   KDB(0)> lb kexit  //set local break point on kexit()
   .kexit+000000 (sid:00000000) permanent & local < ctx: thread+0008C0 >
   KDB(0)> b  //display current active break points
   0:      .execve+000000 (sid:00000000)  permanent & global
   1:      .kexit+000000 (sid:00000000)  permanent & local < ctx: thread+0008C0 >
   KDB(0)> e  //exit debugger
   ...
   Warning, breakpoint ignored (context mismatched):
   .kexit+000000    mflr    r0                  <._exit+000020>
   Breakpoint
   .kexit+000000    mflr    r0                  <._exit+000020>
   KDB(0)> ppda  //print current processor data area

   Per Processor Data Area [00086E40]

   csa......................2FEE0000  mstack...................0037CDB0
   fpowner..................00000000  curthread................E60008C0
   ...
   KDB(0)> lc 1 thread+0008C0  //remove local break point slot 1