import std.stdio, std.process, std.string;
void main(string[] args)
{
writeln("Started on ", chomp(shell("hostname --short")));
}
After a brief investigation, I figured out what was going on: the
shell
call (equivalent to system
in C) was triggering a fork()
, followd by an exec()
call. The debugger automatically attached to the spawned shell. After which point, every time my friend was trying to step through the code, control would jump from one process to the other in an apparent indeterministic fashion (I say apparent because the behavior is actually determined by how the kernel schedules the main, forked, and debugger processes).I replied to the bug report with an explanation of what was going on, suggesting that the
--no-trace-fork
switch be passed in the command line (and thus avoid attaching to the forked shell).My friend argued that this option should be more obvious (i.e. accessible from the graphical user interface) and while you are at it, he said, why not add a "spawn on fork" option, so that the two processes can be debugged in separate windows that do not interfere which each other?
I thought that was a great suggestion, and added (albeit only in the commercially-supported version) two new check-buttons to the Language tab in the Options dialog.
Caveat: Currently, the buttons are grayed out while a program is being debugged (i.e. are enabled only when no target is loaded in the debugger).
(This shortcoming has to do with setting
(This shortcoming has to do with setting
ptrace
options down a tree of attached threads, and I hope to address in a future release).New releases of ZeroBUGS will be available later this week, when I launch the revamped website.
No comments:
Post a Comment