我想知道用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行,并且控制器未使用调试信息进行编译。
答案 0 :(得分:1)
您可以使用gdb attach命令和要调试的机器人控制器进程的PID来调试gdb中的机器人控制器进程。这将允许gdb动态附加进程并调试它,就像它最初从gdb启动一样。这在Webots文档中有详细解释:http://www.cyberbotics.com/dvd/common/doc/webots/guide/section5.5.html