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
相关产品推荐
相关产品推荐

