CaptureStackBackTrace 和 SymGetLineFromAddr64 无法获取行信息返回错误代码 487

标签 c windows

void printStack(void) {
     HANDLE process = GetCurrentProcess();
     SymInitialize( process, NULL, TRUE );

     SymSetOptions(SYMOPT_LOAD_LINES);


     void *stack[64];
     unsigned short frames = CaptureStackBackTrace( 0, 64, stack, NULL );

     SYMBOL_INFO *symbol = (SYMBOL_INFO*) calloc(sizeof(SYMBOL_INFO) + 256 * sizeof(char), 1);
     symbol->MaxNameLen = 255;
     symbol->SizeOfStruct = sizeof(SYMBOL_INFO);

     IMAGEHLP_LINE64 *line = NULL;
     DWORD lastError = 0;
     DWORD displacement;

  
     printf("Backtrace\n");
     for(int i = 0; i < frames; i++) {
         SymFromAddr(process, (DWORD64)(stack[i]), 0, symbol);
         printf("\t %i: %s\n", frames - i - 1, symbol->Name);
         line = (IMAGEHLP_LINE64 *)malloc(sizeof(IMAGEHLP_LINE64));
         line->SizeOfStruct = sizeof(IMAGEHLP_LINE64);
         if (SymGetLineFromAddr64(process, (DWORD64)(stack[i]), &displacement, line)) {
                printf("%s %i\n", line->FileName, line->LineNumber);
         } else {
                printf("failed\n");
         }
        lastError = GetLastError();
        printf("errcode: %i\n", lastError);
        
        free(line);
        line = NULL;
     }

     free(symbol);
}


Backtrace
         5: _printStack
failed
errcode: 487
         4: _main
failed
errcode: 487
         3: __scrt_common_main_seh
failed
errcode: -1073741819
         2: BaseThreadInitThunk
failed
errcode: 487
         1: RtlGetAppContainerNamedObjectPath
failed
errcode: 487
         0: RtlGetAppContainerNamedObjectPath
failed
errcode: 487

我正在尝试从 SymGetLineFromAddr64 中提取行号和文件名,但我输入的地址无效。我使用 (DWORD64)(stack[i]) 作为地址。 我应该使用什么地址才能提取线路信息?

最佳答案

我在 Makefile 中使用了 cl.exe,但没有使用/Zi 编译选项。当我添加/Zi 时,行号和文件名出现。

关于CaptureStackBackTrace 和 SymGetLineFromAddr64 无法获取行信息返回错误代码 487,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69599233/

相关文章:

c - 调用 NdisAcquireSpinLock 后访问全局变量导致 IRQL_NOT_LESS_OR_EQUAL BSoD

java - 更改旋转窗口的底层背景颜色

更改系统头文件路径和自定义头文件

c - C99 中的 HashTable 和 Vector-like 数据结构

c - 如何在 Windows 上构建 gnu `libiconv`?

python - 从子目录导入模块的案例 - 为什么它有效?

python - 如何在检测到文件更改时发送消息? Twisted 和 Web 套接字

windows - Jenkins : Selenium GUI tests are not visible on Windows

windows - WOW64 问题(.lnk 快捷方式)

条件变量信号问题