diff --git a/Include/Python.h b/Include/Python.h
index 2dd8290..aab5810 100644
--- a/Include/Python.h
+++ b/Include/Python.h
@@ -41,6 +41,12 @@
 #include <stddef.h>
 #endif
 
+/* p4a log redirect */
+#include <jni.h>
+#include "android/log.h"
+#define LOG(x) __android_log_write(ANDROID_LOG_INFO, "python", (x))
+
+
 /* CAUTION:  Build setups should ensure that NDEBUG is defined on the
  * compiler command line when building Python in release mode; else
  * assert() calls won't be removed.
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index 9bb3666..4fb89c5 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -1758,13 +1758,14 @@ _PyObject_GC_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
     PyVarObject *op;
 
     if (nitems < 0) {
+      LOG("PyErr_BadInternalCall in gc");
         PyErr_BadInternalCall();
         return NULL;
     }
     size = _PyObject_VAR_SIZE(tp, nitems);
     op = (PyVarObject *) _PyObject_GC_Malloc(size);
     if (op != NULL)
-        op = PyObject_INIT_VAR(op, tp, nitems);
+      op = PyObject_INIT_VAR(op, tp, nitems);
     return op;
 }
 
diff --git a/Modules/getpath.c b/Modules/getpath.c
index c057737..5d02f08 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -866,6 +866,7 @@ wchar_t *
 Py_GetProgramFullPath(void)
 {
     if (!module_search_path)
+      LOG("Py_GetProgramFullPath: calculating path");
         calculate_path();
     return progpath;
 }
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 05b7679..be38e75 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -77,6 +77,7 @@ PyFloat_GetInfo(void)
 
     floatinfo = PyStructSequence_New(&FloatInfoType);
     if (floatinfo == NULL) {
+      LOG("PyFloat_GetInfo got NULL");
         return NULL;
     }
 
@@ -84,22 +85,63 @@ PyFloat_GetInfo(void)
     PyStructSequence_SET_ITEM(floatinfo, pos++, PyLong_FromLong(flag))
 #define SetDblFlag(flag) \
     PyStructSequence_SET_ITEM(floatinfo, pos++, PyFloat_FromDouble(flag))
+    
+    LOG("About to start typing to set int and dbl flags");
+    if (PyErr_Occurred()) {
+      LOG("err even before 1!");
+    } else {
+      LOG("no err before this");
+    }
 
     SetDblFlag(DBL_MAX);
+    if (PyErr_Occurred()) {
+      LOG("err 1");
+    }
     SetIntFlag(DBL_MAX_EXP);
+    if (PyErr_Occurred()) {
+      LOG("err 2");
+    }
     SetIntFlag(DBL_MAX_10_EXP);
+    if (PyErr_Occurred()) {
+      LOG("err 3");
+    }
     SetDblFlag(DBL_MIN);
+    if (PyErr_Occurred()) {
+      LOG("err 4");
+    }
     SetIntFlag(DBL_MIN_EXP);
+    if (PyErr_Occurred()) {
+      LOG("err 5");
+    }
     SetIntFlag(DBL_MIN_10_EXP);
+    if (PyErr_Occurred()) {
+      LOG("err 6");
+    }
     SetIntFlag(DBL_DIG);
+    if (PyErr_Occurred()) {
+      LOG("err 7");
+    }
     SetIntFlag(DBL_MANT_DIG);
+    if (PyErr_Occurred()) {
+      LOG("err 8");
+    }
     SetDblFlag(DBL_EPSILON);
+    if (PyErr_Occurred()) {
+      LOG("err 9");
+    }
     SetIntFlag(FLT_RADIX);
+    if (PyErr_Occurred()) {
+      LOG("err 10");
+    }
     SetIntFlag(FLT_ROUNDS);
+    if (PyErr_Occurred()) {
+      LOG("err 11");
+    }
 #undef SetIntFlag
 #undef SetDblFlag
 
     if (PyErr_Occurred()) {
+      LOG("PyErr_Occurred in floatinfo stuff");
         Py_CLEAR(floatinfo);
         return NULL;
     }
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index d9c131c..0840930 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -2297,6 +2297,12 @@ PyUnicode_AsUCS4Copy(PyObject *string)
 PyObject *
 PyUnicode_FromWideChar(const wchar_t *w, Py_ssize_t size)
 {
+  if (PyErr_Occurred()) {
+    LOG("PyErr already occurred before PyUnicode_FromWideChar does anything");
+  } else {
+    LOG("start of PyUnicode_FromWideChar; everything seems fine");
+  }
+
     if (w == NULL) {
         if (size == 0)
             _Py_RETURN_UNICODE_EMPTY();
diff --git a/Python/errors.c b/Python/errors.c
index 996292a..20bc3f1 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -755,6 +755,9 @@ PyErr_Format(PyObject *exception, const char *format, ...)
 {
     va_list vargs;
     PyObject* string;
+    
+    LOG("PyErr Format with:");
+    LOG(format);
 
 #ifdef HAVE_STDARG_PROTOTYPES
     va_start(vargs, format);
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 0327830..e4428d0 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -415,6 +415,7 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib)
     /* initialize builtin exceptions */
     _PyExc_Init(bimod);
 
+    LOG("Got to _PySys_Init");
     sysmod = _PySys_Init();
     if (sysmod == NULL)
         Py_FatalError("Py_Initialize: can't initialize sys");
@@ -2594,6 +2595,8 @@ Py_FatalError(const char *msg)
 {
     const int fd = fileno(stderr);
     PyThreadState *tstate;
+    
+    LOG(msg);
 
     fprintf(stderr, "Fatal Python error: %s\n", msg);
     fflush(stderr); /* it helps in Windows debug build */
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 39fe53f..d76c793 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -1633,27 +1633,36 @@ _PySys_Init(void)
     int res;
 
     m = PyModule_Create(&sysmodule);
-    if (m == NULL)
+    if (m == NULL) {
+      LOG("module create is NULL");
         return NULL;
+    }
     sysdict = PyModule_GetDict(m);
 #define SET_SYS_FROM_STRING_BORROW(key, value)             \
     do {                                                   \
         PyObject *v = (value);                             \
-        if (v == NULL)                                     \
+        if (v == NULL) {                                   \
+          LOG("set from string 1 is NULL");                \
             return NULL;                                   \
+        }                                                  \
         res = PyDict_SetItemString(sysdict, key, v);       \
         if (res < 0) {                                     \
+          LOG("_SetItemString thing was NULL");            \
             return NULL;                                   \
         }                                                  \
     } while (0)
 #define SET_SYS_FROM_STRING(key, value)                    \
     do {                                                   \
         PyObject *v = (value);                             \
-        if (v == NULL)                                     \
+        if (v == NULL)  {                                  \
+          LOG("set from string 2 is NULL");                \
+          LOG(key);                                        \
             return NULL;                                   \
+        }                                                  \
         res = PyDict_SetItemString(sysdict, key, v);       \
         Py_DECREF(v);                                      \
         if (res < 0) {                                     \
+          LOG("_SetItemString 2 thing was NULL");          \
             return NULL;                                   \
         }                                                  \
     } while (0)
@@ -1677,47 +1686,102 @@ _PySys_Init(void)
 #endif
 
     /* stdin/stdout/stderr are now set by pythonrun.c */
+    
+    if (PyErr_Occurred()) {
+      LOG("PyErr_Occurred before set_sys_from_string stuff");
+    } else {
+      LOG("PyErr has *NOT* yet occurred before set_sys_from_string stuff");
+    }
 
     SET_SYS_FROM_STRING_BORROW("__displayhook__",
                                PyDict_GetItemString(sysdict, "displayhook"));
+    if (PyErr_Occurred()) {
+      LOG("PyErr after __displayhook__");
+    }
     SET_SYS_FROM_STRING_BORROW("__excepthook__",
                                PyDict_GetItemString(sysdict, "excepthook"));
+    if (PyErr_Occurred()) {
+      LOG("PyErr after __excepthook__");
+    }
     SET_SYS_FROM_STRING("version",
                          PyUnicode_FromString(Py_GetVersion()));
+    if (PyErr_Occurred()) {
+      LOG("PyErr after __excepthook__");
+    }
     SET_SYS_FROM_STRING("hexversion",
                          PyLong_FromLong(PY_VERSION_HEX));
+    if (PyErr_Occurred()) {
+      LOG("PyErr after hexversion");
+    }
     SET_SYS_FROM_STRING("_mercurial",
                         Py_BuildValue("(szz)", "CPython", _Py_hgidentifier(),
                                       _Py_hgversion()));
+    if (PyErr_Occurred()) {
+      LOG("PyErr after _mercurial");
+    }
     SET_SYS_FROM_STRING("dont_write_bytecode",
                          PyBool_FromLong(Py_DontWriteBytecodeFlag));
+    if (PyErr_Occurred()) {
+      LOG("PyErr after dont_write_bytecode");
+    }
     SET_SYS_FROM_STRING("api_version",
                         PyLong_FromLong(PYTHON_API_VERSION));
+    if (PyErr_Occurred()) {
+      LOG("PyErr after api_version");
+    }
     SET_SYS_FROM_STRING("copyright",
                         PyUnicode_FromString(Py_GetCopyright()));
+    if (PyErr_Occurred()) {
+      LOG("PyErr after copyright");
+    }
     SET_SYS_FROM_STRING("platform",
                         PyUnicode_FromString(Py_GetPlatform()));
+    if (PyErr_Occurred()) {
+      LOG("PyErr after platform");
+    } else {
+      LOG("No PyErr yet, about to do executable");
+    }
     SET_SYS_FROM_STRING("executable",
                         PyUnicode_FromWideChar(
                                Py_GetProgramFullPath(), -1));
+    if (PyErr_Occurred()) {
+      LOG("PyErr after executable");
+    }
     SET_SYS_FROM_STRING("prefix",
                         PyUnicode_FromWideChar(Py_GetPrefix(), -1));
+    if (PyErr_Occurred()) {
+      LOG("PyErr after prefix");
+    }
     SET_SYS_FROM_STRING("exec_prefix",
                         PyUnicode_FromWideChar(Py_GetExecPrefix(), -1));
+    if (PyErr_Occurred()) {
+      LOG("PyErr after exec_prefix");
+    }
     SET_SYS_FROM_STRING("base_prefix",
                         PyUnicode_FromWideChar(Py_GetPrefix(), -1));
+    if (PyErr_Occurred()) {
+      LOG("PyErr after base_prefix");
+    }
     SET_SYS_FROM_STRING("base_exec_prefix",
                         PyUnicode_FromWideChar(Py_GetExecPrefix(), -1));
+    if (PyErr_Occurred()) {
+      LOG("PyErr after base_exec_prefix");
+    }
     SET_SYS_FROM_STRING("maxsize",
                         PyLong_FromSsize_t(PY_SSIZE_T_MAX));
+    if (PyErr_Occurred()) {
+      LOG("PyErr_Occurred before float_info stuff");
+    }
     SET_SYS_FROM_STRING("float_info",
                         PyFloat_GetInfo());
     SET_SYS_FROM_STRING("int_info",
                         PyLong_GetInfo());
     /* initialize hash_info */
     if (Hash_InfoType.tp_name == NULL) {
-        if (PyStructSequence_InitType2(&Hash_InfoType, &hash_info_desc) < 0)
+      if (PyStructSequence_InitType2(&Hash_InfoType, &hash_info_desc) < 0) {
+          LOG("InitType2 thing was NULL");
             return NULL;
+      }
     }
     SET_SYS_FROM_STRING("hash_info",
                         get_hash_info());
@@ -1745,8 +1809,10 @@ _PySys_Init(void)
 #endif
     if (warnoptions == NULL) {
         warnoptions = PyList_New(0);
-        if (warnoptions == NULL)
+        if (warnoptions == NULL) {
+          LOG("warnoptions is NULL");
             return NULL;
+        }
     }
     else {
         Py_INCREF(warnoptions);
@@ -1758,8 +1824,10 @@ _PySys_Init(void)
     /* version_info */
     if (VersionInfoType.tp_name == NULL) {
         if (PyStructSequence_InitType2(&VersionInfoType,
-                                       &version_info_desc) < 0)
+                                       &version_info_desc) < 0) {
+          LOG("versioninfo stuff is NULL");
             return NULL;
+        }
     }
     version_info = make_version_info();
     SET_SYS_FROM_STRING("version_info", version_info);
@@ -1775,8 +1843,10 @@ _PySys_Init(void)
 
     /* flags */
     if (FlagsType.tp_name == 0) {
-        if (PyStructSequence_InitType2(&FlagsType, &flags_desc) < 0)
+      if (PyStructSequence_InitType2(&FlagsType, &flags_desc) < 0) {
+          LOG("flags stuff is NULL");
             return NULL;
+      }
     }
     SET_SYS_FROM_STRING("flags", make_flags());
     /* prevent user from creating new instances */
@@ -1790,8 +1860,10 @@ _PySys_Init(void)
     /* getwindowsversion */
     if (WindowsVersionType.tp_name == 0)
         if (PyStructSequence_InitType2(&WindowsVersionType,
-                                       &windows_version_desc) < 0)
+                                       &windows_version_desc) < 0) {
+          LOG("Windows version is NULL");
             return NULL;
+        }
     /* prevent user from creating new instances */
     WindowsVersionType.tp_init = NULL;
     WindowsVersionType.tp_new = NULL;
@@ -1815,8 +1887,10 @@ _PySys_Init(void)
 
 #undef SET_SYS_FROM_STRING
 #undef SET_SYS_FROM_STRING_BORROW
-    if (PyErr_Occurred())
+if (PyErr_Occurred()) {
+      LOG("PyErr_Occurred to NULL"); 
         return NULL;
+ }
     return m;
 }