Gcc valgrind执行期间引发异常,但直接调用程序时不会引发异常

Gcc valgrind执行期间引发异常,但直接调用程序时不会引发异常,gcc,valgrind,Gcc,Valgrind,我遇到了一个非常奇怪的问题,我知道从远处可能很难诊断。但任何提示都会有所帮助 说到这里,我的问题是: 当我运行valgrind来执行我的程序时,会抛出一个异常。但是,当我直接从shell调用程序时,它运行良好 我已经尝试使用valgrind的vgdb来研究为什么会发生这种异常。但这只允许我在异常发生后调查变量,因为在我将gdb附加到valgrind(不使用continue)并逐步完成代码之后,我还没有找到启动gdb的好方法 我已经尝试重新创建引发异常的代码段,但是使用相同的变量内容,我不会触发异

我遇到了一个非常奇怪的问题,我知道从远处可能很难诊断。但任何提示都会有所帮助

说到这里,我的问题是:

当我运行valgrind来执行我的程序时,会抛出一个异常。但是,当我直接从shell调用程序时,它运行良好

我已经尝试使用valgrind的vgdb来研究为什么会发生这种异常。但这只允许我在异常发生后调查变量,因为在我将gdb附加到valgrind(不使用continue)并逐步完成代码之后,我还没有找到启动gdb的好方法

我已经尝试重新创建引发异常的代码段,但是使用相同的变量内容,我不会触发异常

我应该补充一点,我是在VMWare Workstation 8.0.1虚拟机上完成这项工作的,该虚拟机具有Ubuntu 11.10和gcc 4.6.1、valgrind 3.7.0和gdb 7.3

感谢您的帮助

只是一些想法:

  • 当您通过valgrind调用您的程序时,缺少一个命令行参数-可能有一种特殊的方法将此参数传递给您的程序

  • 在valgrind中执行程序时,程序的不同运行时行为。valgrind是一种调试器,因此线程的调度顺序可能不同,部分代码的运行速度可能较慢。也许这会触发一个bug,比如比赛条件


  • 是否可以在此处发布一些代码,特别是在引发异常的位置附近?

    1)程序不接受命令行参数。2) 基本上,代码首先解析函数求值,然后对构造的图进行操作。但是,代码的执行是线性的,我假设valgrind不会改变代码执行的顺序。关于valgrind中的调试,stackoverflow上还有另一个线程:我确实看到了之前提示我尝试vgdb的线程。但是,当我启动
    valgrind--vgdb=yes-vgdb error=0 main
    并使用
    target remote | vgdb
    将其连接到gdb内部时。它切换到该线程,但随后仅在中显示
    0x04010E0??()
    。对我来说,唯一的开始方法是使用
    继续
    。到目前为止,我只能在valgrind shell中使用
    Cmd+c
    来停止它,但肯定有更好的方法。在发出continue命令之前,您应该能够设置断点。因此,您可能必须首先将程序加载到gdb中,因为您正在进行某种远程调试(使用符号文件或添加符号文件命令)。谢谢,这就是我需要知道的我相信我找到了这种行为的原因。在
    vgdb
    和shell中,最大双精度的限制似乎不同。在尝试在
    vgdb
    中计算1.2E56^9后,我收到
    nan
    ,而当从shell调用程序时,它愉快地继续(并找到正确的结果)。