es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El informe de DTrace muestra un valor incorrecto cuando estoy rastreando “malloc:return” en MacOS.

Quiero obtener el valor de retorno de malloc, mi comando DTrace es:

sudo dtrace -n 'pid32519::malloc:return {printf("%p %p %p %p %p %p %p %p %p %p %s\n",arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,probefunc);}'

y el pid del proveedor es un programa pequeño como el siguiente:

printf("%d\n",getpid());
getchar();
int cnt=50;
void* a = malloc(1000);
printf("%llx\n",a);
a = malloc(1000);
printf("%llx\n",a);
a = malloc(1000);
printf("%llx\n",a);
a = malloc(1000);
printf("%llx\n",a);
getchar();
return 0;

Encontré alguna documentación que dice “arg1 contiene el valor de retorno”, pero el resultado es:

CPU     ID                    FUNCTION:NAME
  8  10499                    malloc:return f a 1 0 0 0 0 0 0 60000000a malloc

  8  10499                    malloc:return f f 1 0 0 0 0 0 f00000000 60000000a malloc

  8  10499                    malloc:return f 10 1 0 0 0 0 0 f00000010 60000000a malloc

  8  10499                    malloc:return f 10 1 0 0 0 0 1000000000 f00000010 60000000a malloc

No hay ninguno de los argumentos igual al valor de retorno de malloc, ¿dónde está?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basado en el comando DTrace que proporcionaste, parece que estás imprimiendo los valores de los argumentos pasados a la función malloc en lugar del valor de retorno.

    Para imprimir el valor de retorno de malloc, puedes modificar tu comando DTrace de la siguiente manera:

    sudo dtrace -n 'pid32519:libc:malloc:return { printf("%p\n", (void*)arg1); }'

    Esto imprimirá el valor de retorno de malloc como una dirección de puntero.

    Con respecto a la ausencia del valor de retorno en la salida original de DTrace, podría deberse a varias razones, como un índice de argumento incorrecto o un evento de proveedor de DTrace incompatible.

Comments are closed.