我正在开发一个安装系统范围键盘钩子的应用程序.当我从visual studio内部运行调试版本时,我不想安装这个钩子(否则它会挂起工作室,最终挂起系统),我可以通过检查是否定义了DEBUG符号来避免这种情况.
但是,当我调试应用程序的发布版本时,有没有办法检测它是否已从visual studio内部启动以避免同样的问题?因为我一直在处理发布版本,并且想要使用忘记切换回调试版本的调试器修复一些错误,所以必须重新启动工作室/计算机是非常烦人的.
目前我使用这样的方法来检查这种情况:
System.Diagnostics.Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
string moduleName = currentProcess.MainModule.ModuleName;
bool launchedFromStudio = moduleName.Contains(".vshost");
Run Code Online (Sandbox Code Playgroud)
我称之为"蛮力方式",这在我的设置中有效,但我想知道是否有另一种(更好的)方法来检测这种情况.
我们都知道"调试模式"应该用于开发,因为编译器会生成更多的调试信息,并且"Release Mode"应该用于生产版本,因为编译器会生成优化的代码.
但是,假设您正在制作仅在组织内部使用的软件,并且代码性能不是一个大问题,因为该软件需要执行大量文件I/O和数据库查询.在这种情况下,我很想在"调试模式"下发布软件,因为这些额外的调试信息使得将来的维护变得更加容易.
在这种情况下,是否还有任何令人信服的理由在发布模式下发布软件?
有没有人知道用于调试多线程C代码的良好GDB(或其他Linux调试器)教程?我正在寻找一个包含简单示例的方法.
我正在计划关于JavaScript的介绍性演讲,在准备过程中,我想知道新秀陷入的最大陷阱是什么.
我知道在我完全理解闭包之前我已经遇到了一些问题,但JavaScript中的许多奇怪行为都不是我想的了......
那么,你应该向新秀指出哪些陷阱?
我遵循了这些说明(除了将可执行文件复制到我的PATH,因为我似乎无法找到它并且似乎没有必要).然后我在我的公共javascripts目录中创建了一个名为image_render.js的文件
console.log('Hello, world!');
phantom.exit();
Run Code Online (Sandbox Code Playgroud)
在里面,保存它,并phantomjs render_image.js在我的终端中运行.但是,我的终端无法识别命令:
-bash: phantomjs: command not found
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
我有一个使用express和redis的节点应用程序.在我们的开发服务器上,经过一些使用后节点开始使用100%的cpu.应用程序仍然响应,但top报告节点使用100%.在重新启动节点之前,cpu不会丢弃.
我没有把它钉在导致它的任何特定路线或功能上.
诊断此问题的最佳方法是什么?
我用v8-profiler查看了node-inspector,它给了我同样的错误,这里报告了 https://github.com/dannycoates/v8-profiler/issues/10
当我用Visual Studio 编写C/C++时,我经常使用__asm nop;命令插入一个noop代码,以便有一些东西可以打破.例如:
if (someCondition())
{
__asm nop;
}
Run Code Online (Sandbox Code Playgroud)
当条件发生时我不知道该怎么做,但我想停止执行并检查当前状态.有时候someCondition()很简单就可以创建一个条件断点,但条件断点会大大减慢执行速度,但并不总是可行.
现在,在C#中,我通过调用System.Diagnostics.Debugger.Break()或直接进入调试器System.Diagnostics.Debugger.Launch().
现在我被迫编写Java,直到现在我找到了没有比做更好的替代方案System.out.println("bla-bla")并在那里设置断点.同样,请考虑条件断点不可行的情况.
所以,我不知道-是有一个__asm nop或System.Diagnostics.Debugger.Break()Java中的选择?
在C中我们编写代码
#ifdef DEBUG
printf("Some debug log... This could probably be achieved by python logging.Logger");
/* Do some sanity check code */
assert someCondition
/* More complex sanitycheck */
while(list->next){
assert fooCheck(list)
}
#endif
Run Code Online (Sandbox Code Playgroud)
有没有办法在python中执行此操作?
编辑:我得到了答案,还有更多:) Paolo,Steven Rumbalski和J Sebastian给了我正在寻找的信息.感谢das的详细解答,虽然我现在可能不会使用预处理器.
J塞巴斯蒂安的评论被删除了,因为他发表评论的答案,我认为删除了他的答案.他说我可以在Logger中使用isEnabledFor()方法来提供条件.
感谢大家的投入.这是我的第一个问题.我希望我能接受保罗,或塞巴斯蒂安的答案.但由于那些是作为评论提供的,我会接受das的回答.
我可能会使用http://nestedinfiniteloops.wordpress.com/2012/01/15/if-debug-python-flavoured/或Logger.isEnabledFor()
在Inno Setup中调试时如何查看变量值?如何打印一些东西来调试输出?
谢谢
卸载程序时,我看到数百个名为"NoUIEntryPoints-DesignMode"的软件包.根据我的研究结果,我已经认识到如果您调试UWP-App注册文件扩展名,它将创建此包,系统无法删除它.
我该怎么删除它们?
debugging ×10
javascript ×2
c ×1
express ×1
gdb ×1
inno-setup ×1
java ×1
node.js ×1
pascalscript ×1
phantomjs ×1
python ×1
uwp ×1