comparison c_kernel/kernel.py @ 3:8ddfdd2a8574

Add retcode to stderr to make errors such as segfaults visible
author Brendan Rius <brendan@omixy.com>
date Fri, 25 Mar 2016 14:13:22 +0000
parents b46b2e5b6c08
children 5c4b5066fab0
comparison
equal deleted inserted replaced
2:b46b2e5b6c08 3:8ddfdd2a8574
51 with self.new_temp_file(suffix='.c') as source_file: 51 with self.new_temp_file(suffix='.c') as source_file:
52 source_file.write(code) 52 source_file.write(code)
53 source_file.flush() 53 source_file.flush()
54 with self.new_temp_file(suffix='.out') as binary_file: 54 with self.new_temp_file(suffix='.out') as binary_file:
55 retcode, stdout, stderr = self.compile_with_gcc(source_file.name, binary_file.name) 55 retcode, stdout, stderr = self.compile_with_gcc(source_file.name, binary_file.name)
56 self.log.error(retcode) 56 if retcode != 0:
57 self.log.error(stdout) 57 stderr += "[C kernel] GCC exited with code {}".format(retcode)
58 self.log.error(stderr) 58 self.log.error("GCC return code: {}".format(retcode))
59 self.log.error("GCC stdout: {}".format(stdout))
60 self.log.error("GCC stderr: {}".format(stderr))
59 61
60 retcode, out, err = CKernel.execute_command([binary_file.name]) 62 retcode, out, err = CKernel.execute_command([binary_file.name])
63 if retcode != 0:
64 stderr += "[C kernel] Executable exited with code {}".format(retcode)
65 self.log.error("Executable retcode: {}".format(retcode))
66 self.log.error("Executable stdout: {}".format(out))
67 self.log.error("Executable stderr: {}".format(err))
61 stdout += out 68 stdout += out
62 stderr += err 69 stderr += err
63 self.log.error(retcode)
64 self.log.error(out)
65 self.log.error(err)
66 70
67 if not silent: 71 if not silent:
68 stream_content = {'name': 'stderr', 'text': stderr} 72 stream_content = {'name': 'stderr', 'text': stderr}
69 self.send_response(self.iopub_socket, 'stream', stream_content) 73 self.send_response(self.iopub_socket, 'stream', stream_content)
70 stream_content = {'name': 'stdout', 'text': stdout} 74 stream_content = {'name': 'stdout', 'text': stdout}