我尝试将代码不放在主函数中,而是直接放入_start
:
segment .text
global _start
_start:
push rbp
mov rbp, rsp
; ... program logic ...
leave
ret
Run Code Online (Sandbox Code Playgroud)
编译:
yasm -f elf64 main.s
ld -o main main.o
Run Code Online (Sandbox Code Playgroud)
跑步:
./main
Segmentation fault(core dumped)
Run Code Online (Sandbox Code Playgroud)
我读过,离开是
mov esp,ebp
pop ebp
Run Code Online (Sandbox Code Playgroud)
但是为什么弹出堆栈帧的尾声和指向前一帧基址的设置基址帧指针会导致分段错误?
事实上,进行退出系统调用可以优雅地退出。
如果命令有任何错误,我想停止我的 BASH。
make clean || ( echo "ERROR!!" && echo "ERROR!!" >> log_file && exit 1 )
Run Code Online (Sandbox Code Playgroud)
但我的 BASH 似乎仍在继续。如何输入exit 1
单行运算符
我对 BASH 非常陌生,非常感谢任何帮助!
AFAIK,退出代码可能会根据应用程序和项目中采用的约定而有所不同。但是,我想知道是否有 C/C++ 项目的退出代码标准列表。
尝试编写一个在代码中按CTRL+ 号退出的代码时, C实现时会遇到问题,因为大多数在线帮助都涉及信号和其他可能与要求无关的内容。可以跳过此部分并提供解决方案
import signal
import time
def sigint_handler(signum, frame):
print 'Stop pressing the CTRL+C!'
signal.signal(signal.SIGINT, sigint_handler)
Run Code Online (Sandbox Code Playgroud)
目的:
按ctrl+ c应该只是退出程序
打电话的最佳做法是System.exit(0)
什么?
我是故意打电话的System.exit(0)
.什么是正确的打电话方式System.exit(0)
?
我应该创建一个调用的方法System.exit(0)
吗?
谢谢.
这是我的程序:
#include <fstream>
int main() {
std::ofstream fout("data.dat", std::ios::binary);
for (int isam=0; isam<500; isam++) fout.write((char*) &isam, 4);
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
当我在 MacBook 上运行此程序时,文件 data.dat 的长度为 1 字节(在 AWS 上为 0 字节),而不是 2000。如果我增加 500,我最终会得到更多字节,但永远不会达到预期的数量。但是,当我注释掉 exit() 时,无论字节数如何,一切都会按预期工作。这就好像 exit() 停止了前一行代码的缓冲输出。这不是一个bug吗?谢谢
在我处理它的应用程序中,我需要从代码中关闭它.我正在使用exit(0)
它.
是的,我知道我不应该从代码中关闭应用程序
当我以这种方式关闭应用程序并再次运行时,会出现一些奇怪的行为 - 应用程序无法启动,也不会启动屏幕,例如应用程序的新实例,也不会从上一个视图开始,例如应用程序从后台返回.
相反,对于一秒钟,我的应用程序的一些随机,非交互式视图正在出现,并且在此启动画面开始运行之后.
我很困惑,因为我找不到来源,以及如何修复这个丑陋的bug.你能帮助我吗?