Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

xpc_debugger(3) [osx man page]

xpc_abort(3)						   BSD Library Functions Manual 					      xpc_abort(3)

NAME
xpc_abort -- conditions which cause XPC to abort DESCRIPTION
The XPC API will aggressively defend itself against perceived misuse. Wherever XPC can definitively detect misuse of its APIs or data corrup- tion, it will abort. For example, if the retain count of an object underflows by calling xpc_release(3) on it too many times, XPC will abort the process. Many frameworks opt to keep the program limping along in such a state (and will perhaps print a warning message to the system log), but aborting upon detection provides unmistakable warning that there is a bug present in the application which should be fixed before shipping. When XPC aborts a process, it will place information about the condition which triggered the abort in the Application Specific Information section of the crash report. The message will be human-readable, prefixed with "XPC API Misuse:", and the crash report will indicate the stack trace which caused the abort. XPC will also abort if it detects unrecoverable data corruption in its internal state. The messages for these conditions will be prefixd with "Bug in libxpc:". If you come across such a crash, please file a bug and include the generated crash log, system log and steps to reproduce (if there are any identifiable steps). Currently, the manner in which XPC aborts the process will result in termination due to SIGILL (illegal instruction). The exact signal raised may change from release to release (or platform to platform). But on OS X Lion, SIGILL may be used as a hint that the process was terminated intentionally. DEBUGGING
When debugging in Xcode or at the gdb command prompt, the debugger acts as the exception handler for the process being debugged. As a result, if the process is aborted by XPC, no crash report will be generated, and thus it may not be obvious why the program was terminated. As mentioned before, SIGILL is an indication that the process was terminated intentionally. If you observe the last frame in the crashing stack to be _xpc_api_misuse(), you may use the xpc_debugger_api_misuse_info() API from within the debugger to obtain a human-readable string describing why the process was aborted. For example: Program received signal EXC_BAD_INSTRUCTION, Illegal instruction/operand. 0x000000010012b25e in _xpc_api_misuse () (gdb) p (char *)xpc_debugger_api_misuse_info() $1 = 0x7fff5fbff908 "XPC API Misuse: Over-release of object." (gdb) This message indicates that xpc_release(3) was called too many times on an object. IMPORTANT: The xpc_debugger_api_misuse_info() API can ONLY be called from within a debugger. It is not meant to be called directly from the program. Do not call it directly from your code, and do not rely on the address of the result for any reason. SEE ALSO
xpc(3), xpc_object(3), xpc_objects(3) Darwin 1 July, 2011 Darwin

Check Out this Related Man Page

xpc_array_create(3)					   BSD Library Functions Manual 				       xpc_array_create(3)

NAME
xpc_array_create -- creation and management of XPC arrays SYNOPSIS
#include <xpc/xpc.h> xpc_object_t xpc_array_create(const xpc_object_t *objects, size_t count); void xpc_array_set_value(xpc_object_t array, size_t index, xpc_object_t value); void xpc_array_append_value(xpc_object_t array, xpc_object_t value); xpc_object_t xpc_array_get_value(xpc_object_t array, size_t index); size_t xpc_array_get_count(xpc_object_t array); bool xpc_array_apply(xpc_object_t array, xpc_array_applier_t applier); void xpc_array_set_bool(xpc_object_t array, size_t index, bool value); void xpc_array_set_int64(xpc_object_t array, size_t index, int64_t value); void xpc_array_set_uint64(xpc_object_t array, size_t index, uint64_t value); void xpc_array_set_double(xpc_object_t array, size_t index, double value); void xpc_array_set_date(xpc_object_t array, size_t index, int64_t value); void xpc_array_set_data(xpc_object_t array, size_t index, const void *bytes, size_t length); void xpc_array_set_string(xpc_object_t array, size_t index, const char *value); void xpc_array_set_uuid(xpc_object_t array, size_t index, const uuid_t value); void xpc_array_set_fd(xpc_object_t array, size_t index, int value); void xpc_array_set_connection(xpc_object_t array, size_t index, xpc_connection_t value); bool xpc_array_get_bool(xpc_object_t array, size_t index); int64_t xpc_array_get_int64(xpc_object_t array, size_t index); uint64_t xpc_array_get_uint64(xpc_object_t array, size_t index); double xpc_array_get_double(xpc_object_t array, size_t index); int64_t xpc_array_get_date(xpc_object_t array, size_t index); const void * xpc_array_get_data(xpc_object_t array, size_t index, size_t *length); const uint8_t * xpc_array_get_uuid(xpc_object_t array, size_t index); const char * xpc_array_get_string(xpc_object_t array, size_t index); int xpc_array_get_fd(xpc_object_t array, size_t index); xpc_connection_t xpc_array_get_connection(xpc_object_t array, size_t index); ARRAYS
XPC arrays are collections of XPC objects ordered by index. The index is zero-based. XPC arrays are contiguous, and values must exist at all indexes between zero and the greatest index of the array. A hole in the array can be simulated by using a null object as returned by xpc_null_create(3). CREATION
The xpc_array_create() function returns a newly created array. The caller may optionally provide objects, a C array of XPC object references, to initialize the array. The count is used to specify the size of the C array. If objects is NULL, then count must be zero. If count speci- fies more elements than are actually present in values or if values is NULL and count is non-zero, the behavior is undefined. GETTING AND SETTING VALUES
The xpc_array_append_value() function may be used to append a value to the end of an array. This operation increases the count of the values in the array by one. The value of a specific index in the array may be set using the xpc_array_set_value() function. The value must be non-NULL, and the index must already exist (i.e. less than the count provided at creation or extended through previous append operations). The value at a specific index of an array may be retrieved using the xpc_array_get_value() function. The result of getting a non-existing index (i.e. one that was not specified at creation or through a previous append operation) in undefined. PRIMITIVE GET AND SET FUNCTIONS
Various functions exist for retrieving primitive C and operating system types directly from an array without the need for an intermediate boxed object. See xpc_object(3) for more information. The special XPC_ARRAY_APPEND constant may be used to append a value to the end of the array instead of operating on a specific index. SEE ALSO
xpc_object(3), xpc_objects(3), xpc_dictionary_create(3) Darwin 1 July, 2011 Darwin
Man Page