| 886 | |
| 887 | |
| 888 | size_t BNDebuggerRegisterEventCallback( |
| 889 | BNDebuggerController* controller, void (*callback)(void* ctx, BNDebuggerEvent* event), const char* name, void* ctx) |
| 890 | { |
| 891 | return controller->object->RegisterEventCallback( |
| 892 | [=](const DebuggerEvent& event) { |
| 893 | BNDebuggerEvent* evt = new BNDebuggerEvent; |
| 894 | |
| 895 | evt->type = event.type; |
| 896 | evt->data.targetStoppedData.reason = event.data.targetStoppedData.reason; |
| 897 | evt->data.targetStoppedData.exitCode = event.data.targetStoppedData.exitCode; |
| 898 | evt->data.targetStoppedData.lastActiveThread = event.data.targetStoppedData.lastActiveThread; |
| 899 | evt->data.targetStoppedData.data = event.data.targetStoppedData.data; |
| 900 | |
| 901 | evt->data.errorData.error = BNDebuggerAllocString(event.data.errorData.error.c_str()); |
| 902 | evt->data.errorData.shortError = BNDebuggerAllocString(event.data.errorData.shortError.c_str()); |
| 903 | evt->data.errorData.data = event.data.errorData.data; |
| 904 | |
| 905 | evt->data.exitData.exitCode = event.data.exitData.exitCode; |
| 906 | |
| 907 | evt->data.relativeAddress.module = BNDebuggerAllocString(event.data.relativeAddress.module.c_str()); |
| 908 | evt->data.relativeAddress.offset = event.data.relativeAddress.offset; |
| 909 | |
| 910 | evt->data.absoluteAddress = event.data.absoluteAddress; |
| 911 | |
| 912 | evt->data.messageData.message = BNDebuggerAllocString(event.data.messageData.message.c_str()); |
| 913 | |
| 914 | callback(ctx, evt); |
| 915 | |
| 916 | BNDebuggerFreeString(evt->data.errorData.error); |
| 917 | BNDebuggerFreeString(evt->data.errorData.shortError); |
| 918 | BNDebuggerFreeString(evt->data.relativeAddress.module); |
| 919 | BNDebuggerFreeString(evt->data.messageData.message); |
| 920 | delete evt; |
| 921 | }, |
| 922 | name); |
| 923 | } |
| 924 | |
| 925 | |
| 926 | void BNDebuggerRemoveEventCallback(BNDebuggerController* controller, size_t index) |
no test coverage detected