You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SASM中无法调试NASM汇编代码的问题求助

解决SASM调试NASM代码断点命中后直接结束的问题

排查与解决步骤

1. 修正SASM的调试启动逻辑

SASM默认调试流程可能没正确指定入口点,导致断点命中后直接执行到程序退出:

  • 打开SASM的「Settings」,找到Debugger配置项
  • 将调试启动命令从默认的run改成start,或者手动添加初始化命令:先执行break main(如果你的代码入口是main),再执行run
  • 确认SASM调用的是系统自带的gdb,而非内置的旧版本,可在设置中指定GDB路径为/usr/bin/gdb

2. 配置完整的编译链接参数

单独加-F dwarf或-fno-pie不够,要确保编译链参数完整匹配:

  • NASM编译命令:nasm -f elf64 -F dwarf your_code.asm -o your_code.o(64位环境强制生成DWARF调试信息)
  • GCC链接命令:gcc -no-pie your_code.o -o your_code(禁用位置无关执行,保证调试时地址固定)
  • 在SASM的「Compiler settings」里替换默认的编译/链接命令为上述完整命令,避免参数拆分遗漏

3. 检查代码的入口与退出逻辑

如果代码用_start作为入口,断点命中后可能很快执行到exit系统调用导致程序结束:

  • 可以在断点后的代码里临时加个暂停逻辑,比如调用getchar()(需要链接libc),或者调试时用step单步执行而非continue
  • 若用main作为入口,确保main末尾是ret指令,不要直接调用exit

4. 修复SASM兼容性问题

Ubuntu 22.04自带的SASM版本可能和新版GDB存在兼容问题:

  • 尝试通过PPA更新SASM到最新版,或者从源码编译最新版本
  • 重置SASM配置:删除~/.config/SASM目录,重启后重新设置编译调试参数

内容的提问来源于stack exchange,提问作者snorlax212

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:03:12