反向工程OSX用户诊断报告堆栈跟踪

时间:2015-05-29 00:22:31

标签: c++ c macos crash-reports webots

我想知道用C / C ++编写的应用程序究竟在哪里失败。我不能直接调试应用程序,既不使用gdb / lldb也不使用IDE,因为应用程序是由程序启动的(它是webots机器人模拟软件的机器人控制器)。在OSX控制台中,我可以找到“用户诊断报告”,它甚至可以在崩溃时显示一个条带跟踪。 我只需要找出崩溃发生在我的源代码中的确切位置,但我不理解以下堆栈跟踪语法:

int main() {}

显然我的strtol_l函数中的某个地方(+ 4839)最终会调用<script type="text/javascript"> var i = 0; var cg = 0; document.getElementById("button").onclick = function() { while (i !== fingers.value) { cg = Math.random(); cg = cg * 6; cg = Math.floor(cg); if (parseInt(cg) !== parseInt(fingers.value)) { alert("Wrong we found " + cg); i = cg; } else { alert("The number of fingers is " + cg); break; } } } </script> (必须是间接的,因为控制器代码中没有出现此函数调用)导致崩溃

function autenticarbiometria() { var fileInput = document.getElementById('fileInput'); var file = fileInput.files[0]; var reader = new FileReader(); var campo = ""; var status = "f"; filereader.onload = function(e) { var campo = reader.result; document.getElementById('template').value = campo; alert("CAMPO TAMANHO --> " + campo.length); } reader.readAsArrayBuffer(file); ... 代表什么?它是一个内存块偏移量?它不能是源代码行号,因为控制器的源代码仅为~1200行,并且控制器未使用调试信息进行编译。

1 个答案:

答案 0 :(得分:1)

您可以使用gdb attach命令和要调试的机器人控制器进程的PID来调试gdb中的机器人控制器进程。这将允许gdb动态附加进程并调试它,就像它最初从gdb启动一样。这在Webots文档中有详细解释:http://www.cyberbotics.com/dvd/common/doc/webots/guide/section5.5.html