mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-11-09 22:56:35 +00:00
creport: Further skeleton the CrashReport object.
This commit is contained in:
parent
af4485d533
commit
6ffc9bd8e0
3 changed files with 47 additions and 4 deletions
10
stratosphere/creport/source/creport_crash_report.cpp
Normal file
10
stratosphere/creport/source/creport_crash_report.cpp
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#include <switch.h>
|
||||||
|
#include "creport_crash_report.hpp"
|
||||||
|
|
||||||
|
void CrashReport::BuildReport(u64 pid, bool has_extra_info) {
|
||||||
|
this->has_extra_info = has_extra_info;
|
||||||
|
if (OpenProcess(pid)) {
|
||||||
|
/* TODO: Actually generate report... */
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
}
|
30
stratosphere/creport/source/creport_crash_report.hpp
Normal file
30
stratosphere/creport/source/creport_crash_report.hpp
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <switch.h>
|
||||||
|
|
||||||
|
class CrashReport {
|
||||||
|
private:
|
||||||
|
Handle debug_handle;
|
||||||
|
bool has_extra_info;
|
||||||
|
Result result;
|
||||||
|
|
||||||
|
public:
|
||||||
|
CrashReport() : debug_handle(INVALID_HANDLE), result(0x4A2) { }
|
||||||
|
|
||||||
|
void BuildReport(u64 pid, bool has_extra_info);
|
||||||
|
|
||||||
|
Result GetResult() {
|
||||||
|
return this->result;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OpenProcess(u64 pid) {
|
||||||
|
return R_SUCCEEDED(svcDebugActiveProcess(&debug_handle, pid));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Close() {
|
||||||
|
if (debug_handle != INVALID_HANDLE) {
|
||||||
|
svcCloseHandle(debug_handle);
|
||||||
|
debug_handle = INVALID_HANDLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
|
@ -6,6 +6,8 @@
|
||||||
|
|
||||||
#include <switch.h>
|
#include <switch.h>
|
||||||
|
|
||||||
|
#include "creport_crash_report.hpp"
|
||||||
|
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
extern u32 __start__;
|
extern u32 __start__;
|
||||||
|
@ -74,6 +76,8 @@ static u64 creport_parse_u64(char *s) {
|
||||||
return out_val;
|
return out_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static CrashReport g_Creport;
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
/* Validate arguments. */
|
/* Validate arguments. */
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
|
@ -85,12 +89,11 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Parse arguments. */
|
/* Parse crashed PID. */
|
||||||
u64 crashed_pid = creport_parse_u64(argv[0]);
|
u64 crashed_pid = creport_parse_u64(argv[0]);
|
||||||
bool has_extra_info = argv[1][0] == '1';
|
|
||||||
|
|
||||||
/* TODO: Generate report. */
|
/* Try to debug the crashed process. */
|
||||||
(void)(has_extra_info);
|
g_Creport.BuildReport(crashed_pid, argv[1][0] == '1');
|
||||||
|
|
||||||
if (R_SUCCEEDED(nsdevInitialize())) {
|
if (R_SUCCEEDED(nsdevInitialize())) {
|
||||||
nsdevTerminateProcess(crashed_pid);
|
nsdevTerminateProcess(crashed_pid);
|
||||||
|
|
Loading…
Reference in a new issue