我在找gdb的东西--在组件上相当于核心。
举个例子:
//crash.cpp
#include <iostream>
int main() {
std::cout << "crashing soon..." << std::endl;
int *a = 0;
*a = 1;
} 我在以下几个方面进行了汇编:
$ em++ -g4 crash.cpp -o crash.html --source-map-base http://localhost:8080/并启动服务器:
$ emrun --no_browser --port 8080 crash.html那么,如何获得这个核心转储/崩溃的堆栈跟踪呢?在访问页面时,chrome/firefox上的控制台只显示一个js堆栈跟踪,这对我没有帮助。查看源代码,铬控制台上的=>调用堆栈在崩溃后只显示“未暂停”。这是在debian 11,emscripten 2.0.12~dfsg-2,clang-11上。
发布于 2021-09-14 16:17:04
原因是您所做的并不是WebAssembly中的错误。与许多嵌入式平台一样,在WebAssembly内存模型中,向零指针写入或读取是一种非常有效的操作。
但是,Emscripten试图帮助您捕获C/C++ --这是一个常见的错误,因此它所做的是在程序完成执行后检查地址为零的值,如果该值碰巧被覆盖,则抛出一个有用的断言。由于这个原因,您将得到一个只包含JavaScript位的堆栈跟踪--因为检查是在JavaScript已经退出WASS堆栈时完成的。
如果您尝试了一个导致立即中止(例如assert(false) )的不同操作,那么您将看到堆栈上的WebAssembly和/或C/C++如预期的那样。
https://stackoverflow.com/questions/69156739
复制相似问题