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á?
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.