我有一个关于线程和回调的一般问题.比方说,我们有一个线程与主程序一起连续运行.
主程序已经在线程中注册了回调函数.所以线程可以随时调用回调函数.通常,我们通过将函数指针传递给线程来注册回调.我想知道线程调用该回调函数的时间,它是该线程的一部分,还是它将成为主程序的一部分.我想知道这个过程的机制,比如当线程调用回调时主程序执行是如何停止或中断的.另一件事是在调用回调时函数调用堆栈将如何表现.
我正在研究非常庞大的基于Java web的应用程序.由于在开发过程中没有进行适当的日志记录,因此我很难设置断点并调试应用程序,因为我不知道执行顺序.在执行某些操作后,是否有任何机制可以获取正在运行的java应用程序的完整Call Stack.
我在网上搜索了很长时间,但无法找到具体的解决方案.如果有什么东西请建议我.谢谢
基本上调用栈将开始流行了函数调用一个接一个,当最后的函数调用返回.但是当我尝试创建一个接近其最大值的调用堆栈时,An uncaught expression就会被提升.
//Code for testing the stack size
var cnt = 0;
function test(){
 //Max stack size is nearer to ~41800
 if(cnt++ == 41763){
  console.log('finished');
  return true;
 }
 return test();
}
test();
所以上面的代码在我的Chrome版本49.0.2623.112 m中给我一个例外,如下所示,
未捕获的异常
<true
请注意,上述错误中没有消息.我的问题是,
堆栈中的最后一个函数调用已返回true,这意味着未超出堆栈大小.为什么没有返回该堆栈中的其他函数调用?这个空白异常消息的原因是什么?
当函数中发生错误时,我想知道导致它的事件序列,特别是当从十几个不同的地方调用该函数时.有没有办法在VB6中检索调用堆栈,或者我必须以艰难的方式执行它(例如,每个函数和错误处理程序中的日志条目等)?
如果我运行以下测试,它将失败:
public class CrazyExceptions {
    private Exception exception;
    @Before
    public void setUp(){
        exception = new Exception();
    }
    @Test
    public void stackTraceMentionsTheLocationWhereTheExceptionWasThrown(){
        String thisMethod = new Exception().getStackTrace()[0].getMethodName();
        try {
            throw exception;
        }
        catch(Exception e) {
            assertEquals(thisMethod, e.getStackTrace()[0].getMethodName());
        }
    }
}
出现以下错误:
Expected :stackTraceMentionsTheLocationWhereTheExceptionWasThrown
Actual   :setUp
堆栈跟踪只是平坦的说谎.
抛出异常时,为什么不重写堆栈跟踪?我不是Java开发者,也许我在这里遗漏了一些东西.
我有一个我刚刚重新考虑的php应用程序.不幸的是,它喷出了警告:
警告:preg_match()要求参数2为字符串,对象在第776行的/home/yacoby/dev/netbeans/php/Zend/Db/Select.php中给出
由于我没有callstack,所以不可能(或非常努力)解决问题,因此无法分辨我的代码的哪些部分导致警告并且有很多代码.
我需要一种方法来处理错误之类的警告(因为应用程序死了并打印堆栈跟踪)或者我需要在打印错误时显示堆栈跟踪.有没有办法做到这一点?
我正在开发一个非常大的应用程序,我会定期将ENTIRE调用堆栈记录到当前执行点(不是例外).这里的想法是,我想要一张确切的代码路径的地图,这使我成为我的观点.我一直在使用madExcept,使用jclDebug,虽然我可以获得一些调用堆栈,但我似乎无法获得在应用程序中进行的每个方法/过程/函数调用以显示在日志中.
我在项目中启用了堆栈帧,调试信息等.我甚至尝试在没有包含在调用堆栈中的各个方法上打开堆栈帧无济于事.
我正在努力做甚么可能吗?我真的试图避免在数百万行代码中添加日志代码以便记录代码路径.
我们已经知道,当我们在Java中调用方法时,参数和局部变量将存储在堆栈中.
例如,以下代码:
public class Test
{
    int x = 10;
    int y = 20;
    void test(int y)
    {
        int z = y;
        this.x = y; // How JVM knows where is our current object?
    }
    public static void main(String [] args)
    {
        Test obj = new Test();
        obj.test(3);
    }
} 
当我们调用时,会产生如下所示的调用堆栈obj.test():
|             |
+-------------+
|     z       |
|     y       |  obj.test()
+-------------+
|    obj      |  main()
+-------------+
但我想知道存储this在哪里引用method?它是否也存储在堆栈中,如下所示:
|             |
+-------------+
|   this      | …由于我已经安装了最后一个xCode(我之前的版本是3.xx),因此很难调试崩溃的应用程序.实际上,callstack通常是空的.并且显示的方法是
int main(int argc, char *argv[]) {   
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, @"MyAppDelegate");
    [pool drain];
    return retVal;
}
例如:

有没有人注意到这个?它与以前的XCode在同一个项目上完美配合.有什么解决方案吗?
callstack ×10
java ×3
.net ×1
c++ ×1
callback ×1
debugging ×1
delphi ×1
event-loop ×1
exception ×1
iphone ×1
javascript ×1
madexcept ×1
php ×1
reflection ×1
runtime ×1
stack-trace ×1
this ×1
vb6 ×1
warnings ×1
xcode4.2 ×1